Skip to content

Commit a5d2da9

Browse files
committed
refactor(Data/Rat/NNRat): move BigOperator lemmas to a new file (#9917)
`NNRat` has far too many dependencies at the moment. This only removes 20 from its transitive closure (1609 -> 1589 according to `lake exe graph` and `| wc -l`), but it's a start.
1 parent 029e239 commit a5d2da9

File tree

3 files changed

+62
-44
lines changed

3 files changed

+62
-44
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,6 +1919,7 @@ import Mathlib.Data.Rat.Floor
19191919
import Mathlib.Data.Rat.Init
19201920
import Mathlib.Data.Rat.Lemmas
19211921
import Mathlib.Data.Rat.NNRat
1922+
import Mathlib.Data.Rat.NNRat.BigOperators
19221923
import Mathlib.Data.Rat.Order
19231924
import Mathlib.Data.Rat.Sqrt
19241925
import Mathlib.Data.Rat.Star

Mathlib/Data/Rat/NNRat.lean

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Yaël Dillies, Bhavik Mehta
55
-/
66
import Mathlib.Algebra.Algebra.Basic
7-
import Mathlib.Algebra.BigOperators.Order
87
import Mathlib.Algebra.Order.Nonneg.Field
98
import Mathlib.Algebra.Order.Nonneg.Floor
109

@@ -248,49 +247,6 @@ theorem coe_indicator (s : Set α) (f : α → ℚ≥0) (a : α) :
248247
theorem coe_pow (q : ℚ≥0) (n : ℕ) : (↑(q ^ n) : ℚ) = (q : ℚ) ^ n :=
249248
coeHom.map_pow _ _
250249
#align nnrat.coe_pow NNRat.coe_pow
251-
252-
@[norm_cast]
253-
theorem coe_list_sum (l : List ℚ≥0) : (l.sum : ℚ) = (l.map (↑)).sum :=
254-
coeHom.map_list_sum _
255-
#align nnrat.coe_list_sum NNRat.coe_list_sum
256-
257-
@[norm_cast]
258-
theorem coe_list_prod (l : List ℚ≥0) : (l.prod : ℚ) = (l.map (↑)).prod :=
259-
coeHom.map_list_prod _
260-
#align nnrat.coe_list_prod NNRat.coe_list_prod
261-
262-
@[norm_cast]
263-
theorem coe_multiset_sum (s : Multiset ℚ≥0) : (s.sum : ℚ) = (s.map (↑)).sum :=
264-
coeHom.map_multiset_sum _
265-
#align nnrat.coe_multiset_sum NNRat.coe_multiset_sum
266-
267-
@[norm_cast]
268-
theorem coe_multiset_prod (s : Multiset ℚ≥0) : (s.prod : ℚ) = (s.map (↑)).prod :=
269-
coeHom.map_multiset_prod _
270-
#align nnrat.coe_multiset_prod NNRat.coe_multiset_prod
271-
272-
@[norm_cast]
273-
theorem coe_sum {s : Finset α} {f : α → ℚ≥0} : ↑(∑ a in s, f a) = ∑ a in s, (f a : ℚ) :=
274-
coeHom.map_sum _ _
275-
#align nnrat.coe_sum NNRat.coe_sum
276-
277-
theorem toNNRat_sum_of_nonneg {s : Finset α} {f : α → ℚ} (hf : ∀ a, a ∈ s → 0 ≤ f a) :
278-
(∑ a in s, f a).toNNRat = ∑ a in s, (f a).toNNRat := by
279-
rw [← coe_inj, coe_sum, Rat.coe_toNNRat _ (Finset.sum_nonneg hf)]
280-
exact Finset.sum_congr rfl fun x hxs ↦ by rw [Rat.coe_toNNRat _ (hf x hxs)]
281-
#align nnrat.to_nnrat_sum_of_nonneg NNRat.toNNRat_sum_of_nonneg
282-
283-
@[norm_cast]
284-
theorem coe_prod {s : Finset α} {f : α → ℚ≥0} : ↑(∏ a in s, f a) = ∏ a in s, (f a : ℚ) :=
285-
coeHom.map_prod _ _
286-
#align nnrat.coe_prod NNRat.coe_prod
287-
288-
theorem toNNRat_prod_of_nonneg {s : Finset α} {f : α → ℚ} (hf : ∀ a ∈ s, 0 ≤ f a) :
289-
(∏ a in s, f a).toNNRat = ∏ a in s, (f a).toNNRat := by
290-
rw [← coe_inj, coe_prod, Rat.coe_toNNRat _ (Finset.prod_nonneg hf)]
291-
exact Finset.prod_congr rfl fun x hxs ↦ by rw [Rat.coe_toNNRat _ (hf x hxs)]
292-
#align nnrat.to_nnrat_prod_of_nonneg NNRat.toNNRat_prod_of_nonneg
293-
294250
@[norm_cast]
295251
theorem nsmul_coe (q : ℚ≥0) (n : ℕ) : ↑(n • q) = n • (q : ℚ) :=
296252
coeHom.toAddMonoidHom.map_nsmul _ _
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/-
2+
Copyright (c) 2022 Yaël Dillies, Bhavik Mehta. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yaël Dillies, Bhavik Mehta
5+
-/
6+
import Mathlib.Algebra.BigOperators.Order
7+
import Mathlib.Data.Rat.BigOperators
8+
import Mathlib.Data.Rat.NNRat
9+
10+
/-! # Casting lemmas for non-negative rational numbers involving sums and products
11+
-/
12+
13+
open BigOperators
14+
15+
variable {ι α : Type*}
16+
17+
namespace NNRat
18+
19+
@[norm_cast]
20+
theorem coe_list_sum (l : List ℚ≥0) : (l.sum : ℚ) = (l.map (↑)).sum :=
21+
coeHom.map_list_sum _
22+
#align nnrat.coe_list_sum NNRat.coe_list_sum
23+
24+
@[norm_cast]
25+
theorem coe_list_prod (l : List ℚ≥0) : (l.prod : ℚ) = (l.map (↑)).prod :=
26+
coeHom.map_list_prod _
27+
#align nnrat.coe_list_prod NNRat.coe_list_prod
28+
29+
@[norm_cast]
30+
theorem coe_multiset_sum (s : Multiset ℚ≥0) : (s.sum : ℚ) = (s.map (↑)).sum :=
31+
coeHom.map_multiset_sum _
32+
#align nnrat.coe_multiset_sum NNRat.coe_multiset_sum
33+
34+
@[norm_cast]
35+
theorem coe_multiset_prod (s : Multiset ℚ≥0) : (s.prod : ℚ) = (s.map (↑)).prod :=
36+
coeHom.map_multiset_prod _
37+
#align nnrat.coe_multiset_prod NNRat.coe_multiset_prod
38+
39+
@[norm_cast]
40+
theorem coe_sum {s : Finset α} {f : α → ℚ≥0} : ↑(∑ a in s, f a) = ∑ a in s, (f a : ℚ) :=
41+
coeHom.map_sum _ _
42+
#align nnrat.coe_sum NNRat.coe_sum
43+
44+
theorem toNNRat_sum_of_nonneg {s : Finset α} {f : α → ℚ} (hf : ∀ a, a ∈ s → 0 ≤ f a) :
45+
(∑ a in s, f a).toNNRat = ∑ a in s, (f a).toNNRat := by
46+
rw [← coe_inj, coe_sum, Rat.coe_toNNRat _ (Finset.sum_nonneg hf)]
47+
exact Finset.sum_congr rfl fun x hxs ↦ by rw [Rat.coe_toNNRat _ (hf x hxs)]
48+
#align nnrat.to_nnrat_sum_of_nonneg NNRat.toNNRat_sum_of_nonneg
49+
50+
@[norm_cast]
51+
theorem coe_prod {s : Finset α} {f : α → ℚ≥0} : ↑(∏ a in s, f a) = ∏ a in s, (f a : ℚ) :=
52+
coeHom.map_prod _ _
53+
#align nnrat.coe_prod NNRat.coe_prod
54+
55+
theorem toNNRat_prod_of_nonneg {s : Finset α} {f : α → ℚ} (hf : ∀ a ∈ s, 0 ≤ f a) :
56+
(∏ a in s, f a).toNNRat = ∏ a in s, (f a).toNNRat := by
57+
rw [← coe_inj, coe_prod, Rat.coe_toNNRat _ (Finset.prod_nonneg hf)]
58+
exact Finset.prod_congr rfl fun x hxs ↦ by rw [Rat.coe_toNNRat _ (hf x hxs)]
59+
#align nnrat.to_nnrat_prod_of_nonneg NNRat.toNNRat_prod_of_nonneg
60+
61+
end NNRat

0 commit comments

Comments
 (0)