Skip to content

Commit fdaf175

Browse files
committed
chore: Do not import algebra in Data.Finset.Lattice (#13243)
Move the `OrderBot Nat` instance to a new file `Order.Nat` and the `LinearOrderedSemiring` lemmas from `Data.Finset.Lattice` to a new file `Algebra.Order.Ring.Finset`. I credit Eric for leanprover-community/mathlib3#12912.
1 parent b1a351c commit fdaf175

File tree

30 files changed

+169
-183
lines changed

30 files changed

+169
-183
lines changed

Archive/Wiedijk100Theorems/AscendingDescendingSequences.lean

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,9 @@ theorem erdos_szekeres {r s n : ℕ} {f : Fin n → α} (hn : r * s < n) (hf : I
155155
constructor <;>
156156
· apply le_max'
157157
rw [mem_image]
158-
refine ⟨{i}, by solve_by_elim, card_singleton i⟩
159-
refine ⟨?_, ?_⟩
158+
exact ⟨{i}, by solve_by_elim, card_singleton i⟩
160159
-- Need to get `a_i ≤ r`, here phrased as: there is some `a < r` with `a+1 = a_i`.
161-
· refine ⟨(ab i).1 - 1, ?_, Nat.succ_pred_eq_of_pos z.1
162-
rw [tsub_lt_iff_right z.1]
163-
apply Nat.lt_succ_of_le q.1
164-
· refine ⟨(ab i).2 - 1, ?_, Nat.succ_pred_eq_of_pos z.2
165-
rw [tsub_lt_iff_right z.2]
166-
apply Nat.lt_succ_of_le q.2
160+
exact ⟨⟨(ab i).1 - 1, by omega⟩, (ab i).2 - 1, by omega⟩
167161
-- To get our contradiction, it suffices to prove `n ≤ r * s`
168162
apply not_le_of_lt hn
169163
-- Which follows from considering the cardinalities of the subset above, since `ab` is injective.

Mathlib.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ import Mathlib.Algebra.Order.Ring.Cast
547547
import Mathlib.Algebra.Order.Ring.CharZero
548548
import Mathlib.Algebra.Order.Ring.Cone
549549
import Mathlib.Algebra.Order.Ring.Defs
550+
import Mathlib.Algebra.Order.Ring.Finset
550551
import Mathlib.Algebra.Order.Ring.InjSurj
551552
import Mathlib.Algebra.Order.Ring.Int
552553
import Mathlib.Algebra.Order.Ring.Nat
@@ -3310,6 +3311,7 @@ import Mathlib.Order.Monotone.Extension
33103311
import Mathlib.Order.Monotone.Monovary
33113312
import Mathlib.Order.Monotone.Odd
33123313
import Mathlib.Order.Monotone.Union
3314+
import Mathlib.Order.Nat
33133315
import Mathlib.Order.Notation
33143316
import Mathlib.Order.OmegaCompletePartialOrder
33153317
import Mathlib.Order.OrdContinuous

Mathlib/Algebra/BigOperators/Basic.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,7 +1534,7 @@ theorem prod_range_succ' (f : ℕ → β) :
15341534
@[to_additive]
15351535
theorem eventually_constant_prod {u : ℕ → β} {N : ℕ} (hu : ∀ n ≥ N, u n = 1) {n : ℕ} (hn : N ≤ n) :
15361536
(∏ k ∈ range n, u k) = ∏ k ∈ range N, u k := by
1537-
obtain ⟨m, rfl : n = N + m⟩ := le_iff_exists_add.mp hn
1537+
obtain ⟨m, rfl : n = N + m⟩ := Nat.exists_eq_add_of_le hn
15381538
clear hn
15391539
induction' m with m hm
15401540
· simp
@@ -2180,7 +2180,7 @@ theorem card_biUnion_le [DecidableEq β] {s : Finset α} {t : α → Finset β}
21802180
calc
21812181
((insert a s).biUnion t).card ≤ (t a).card + (s.biUnion t).card := by
21822182
{ rw [biUnion_insert]; exact Finset.card_union_le _ _ }
2183-
_ ≤ ∑ a ∈ insert a s, card (t a) := by rw [sum_insert has]; exact add_le_add_left ih _
2183+
_ ≤ ∑ a ∈ insert a s, card (t a) := by rw [sum_insert has]; exact Nat.add_le_add_left ih _
21842184
#align finset.card_bUnion_le Finset.card_biUnion_le
21852185

21862186
theorem card_eq_sum_card_fiberwise [DecidableEq β] {f : α → β} {s : Finset α} {t : Finset β}
@@ -2576,7 +2576,7 @@ theorem nat_abs_sum_le {ι : Type*} (s : Finset ι) (f : ι → ℤ) :
25762576
induction' s using Finset.induction_on with i s his IH
25772577
· simp only [Finset.sum_empty, Int.natAbs_zero, le_refl]
25782578
· simp only [his, Finset.sum_insert, not_false_iff]
2579-
exact (Int.natAbs_add_le _ _).trans (add_le_add le_rfl IH)
2579+
exact (Int.natAbs_add_le _ _).trans (Nat.add_le_add_left IH _)
25802580
#align nat_abs_sum_le nat_abs_sum_le
25812581

25822582
/-! ### `Additive`, `Multiplicative` -/

Mathlib/Algebra/BigOperators/Fin.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ def finFunctionFinEquiv {m n : ℕ} : (Fin n → Fin m) ≃ Fin (m ^ n) :=
330330
cases m
331331
· exact isEmptyElim (f <| Fin.last _)
332332
simp_rw [Fin.sum_univ_castSucc, Fin.coe_castSucc, Fin.val_last]
333-
refine (add_lt_add_of_lt_of_le (ih _) <| mul_le_mul_right' (Fin.is_le _) _).trans_eq ?_
333+
refine (Nat.add_lt_add_of_lt_of_le (ih _) <| Nat.mul_le_mul_right _ (Fin.is_le _)).trans_eq ?_
334334
rw [← one_add_mul (_ : ℕ), add_comm, pow_succ']⟩)
335335
(fun a b => ⟨a / m ^ (b : ℕ) % m, by
336336
cases' n with n
@@ -385,7 +385,7 @@ def finPiFinEquiv {m : ℕ} {n : Fin m → ℕ} : (∀ i : Fin m, Fin (n i)) ≃
385385
intro n nn f fn
386386
cases nn
387387
· exact isEmptyElim fn
388-
refine (add_lt_add_of_lt_of_le (ih _) <| mul_le_mul_right' (Fin.is_le _) _).trans_eq ?_
388+
refine (Nat.add_lt_add_of_lt_of_le (ih _) <| Nat.mul_le_mul_right _ (Fin.is_le _)).trans_eq ?_
389389
rw [← one_add_mul (_ : ℕ), mul_comm, add_comm]⟩)
390390
(fun a b => ⟨(a / ∏ j : Fin b, n (Fin.castLE b.is_lt.le j)) % n b, by
391391
cases m

Mathlib/Algebra/Order/Group/Nat.lean

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,6 @@ instance instOrderedSub : OrderedSub ℕ := by
4545
· simp
4646
· simp only [sub_succ, pred_le_iff, ih, succ_add, add_succ]
4747

48-
/-!
49-
### Extra instances to short-circuit type class resolution
50-
51-
These also prevent non-computable instances being used to construct these instances non-computably.
52-
-/
53-
54-
instance instOrderBot : OrderBot ℕ := by infer_instance
55-
#align nat.order_bot Nat.instOrderBot
56-
5748
/-! ### Miscellaneous lemmas -/
5849

5950
theorem _root_.NeZero.one_le {n : ℕ} [NeZero n] : 1 ≤ n := one_le_iff_ne_zero.mpr (NeZero.ne n)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/-
2+
Copyright (c) 2022 Eric Wieser. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Eric Wieser
5+
-/
6+
import Mathlib.Algebra.Order.Ring.Defs
7+
import Mathlib.Data.Finset.Lattice
8+
9+
/-!
10+
# Algebraic properties of finitary supremum
11+
-/
12+
13+
namespace Finset
14+
variable {ι R : Type*} [LinearOrderedSemiring R] {a b : ι → R}
15+
16+
theorem sup_mul_le_mul_sup_of_nonneg [OrderBot R] (s : Finset ι) (ha : ∀ i ∈ s, 0 ≤ a i)
17+
(hb : ∀ i ∈ s, 0 ≤ b i) : s.sup (a * b) ≤ s.sup a * s.sup b :=
18+
Finset.sup_le fun _i hi ↦
19+
mul_le_mul (le_sup hi) (le_sup hi) (hb _ hi) ((ha _ hi).trans <| le_sup hi)
20+
#align finset.sup_mul_le_mul_sup_of_nonneg Finset.sup_mul_le_mul_sup_of_nonneg
21+
22+
theorem mul_inf_le_inf_mul_of_nonneg [OrderTop R] (s : Finset ι) (ha : ∀ i ∈ s, 0 ≤ a i)
23+
(hb : ∀ i ∈ s, 0 ≤ b i) : s.inf a * s.inf b ≤ s.inf (a * b) :=
24+
Finset.le_inf fun i hi ↦ mul_le_mul (inf_le hi) (inf_le hi) (Finset.le_inf hb) (ha i hi)
25+
#align finset.mul_inf_le_inf_mul_of_nonneg Finset.mul_inf_le_inf_mul_of_nonneg
26+
27+
theorem sup'_mul_le_mul_sup'_of_nonneg (s : Finset ι) (H : s.Nonempty) (ha : ∀ i ∈ s, 0 ≤ a i)
28+
(hb : ∀ i ∈ s, 0 ≤ b i) : s.sup' H (a * b) ≤ s.sup' H a * s.sup' H b :=
29+
(sup'_le _ _) fun _i hi ↦
30+
mul_le_mul (le_sup' _ hi) (le_sup' _ hi) (hb _ hi) ((ha _ hi).trans <| le_sup' _ hi)
31+
#align finset.sup'_mul_le_mul_sup'_of_nonneg Finset.sup'_mul_le_mul_sup'_of_nonneg
32+
33+
theorem inf'_mul_le_mul_inf'_of_nonneg (s : Finset ι) (H : s.Nonempty) (ha : ∀ i ∈ s, 0 ≤ a i)
34+
(hb : ∀ i ∈ s, 0 ≤ b i) : s.inf' H a * s.inf' H b ≤ s.inf' H (a * b) :=
35+
(le_inf' _ _) fun _i hi ↦ mul_le_mul (inf'_le _ hi) (inf'_le _ hi) (le_inf' _ _ hb) (ha _ hi)
36+
#align finset.inf'_mul_le_mul_inf'_of_nonneg Finset.inf'_mul_le_mul_inf'_of_nonneg
37+
38+
end Finset

Mathlib/Analysis/Normed/Field/Basic.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Patrick Massot, Johannes Hölzl
55
-/
66
import Mathlib.Algebra.Algebra.NonUnitalSubalgebra
77
import Mathlib.Algebra.Algebra.Subalgebra.Basic
8+
import Mathlib.Algebra.Order.Ring.Finset
89
import Mathlib.Analysis.Normed.Group.Basic
910
import Mathlib.GroupTheory.OrderOfElement
1011
import Mathlib.Topology.Instances.NNReal

Mathlib/Combinatorics/Additive/FreimanHom.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ assuming there is no wrap-around. -/
354354
lemma isAddFreimanIso_Iio (hm : m ≠ 0) (hkmn : m * k ≤ n) :
355355
IsAddFreimanIso m (Iio (k : Fin (n + 1))) (Iio k) val := by
356356
obtain _ | k := k
357-
· simp [← bot_eq_zero]; simp [← _root_.bot_eq_zero, -bot_eq_zero']
357+
· simp [← bot_eq_zero]; simp [← _root_.bot_eq_zero, -Nat.bot_eq_zero, -bot_eq_zero']
358358
have hkmn' : m * k ≤ n := (Nat.mul_le_mul_left _ k.le_succ).trans hkmn
359359
convert isAddFreimanIso_Iic hm hkmn' using 1 <;> ext x
360360
· simp [lt_iff_val_lt_val, le_iff_val_le_val, -val_fin_le, -val_fin_lt, Nat.mod_eq_of_lt,

Mathlib/Combinatorics/Hall/Finite.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ theorem hall_cond_of_compl {ι : Type u} {t : ι → Finset α} {s : Finset ι}
143143
intro x hx hc _
144144
exact absurd hx hc
145145
have : s'.card = (s ∪ s'.image fun z => z.1).card - s.card := by
146-
simp [disj, card_image_of_injective _ Subtype.coe_injective]
146+
simp [disj, card_image_of_injective _ Subtype.coe_injective, Nat.add_sub_cancel_left]
147147
rw [this, hus]
148-
refine (tsub_le_tsub_right (ht _) _).trans ?_
148+
refine (Nat.sub_le_sub_right (ht _) _).trans ?_
149149
rw [← card_sdiff]
150150
· refine (card_le_card ?_).trans le_rfl
151151
intro t

Mathlib/Combinatorics/SetFamily/Shatter.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ lemma card_le_card_shatterer (𝒜 : Finset (Finset α)) : 𝒜.card ≤ 𝒜.sh
120120
mem_shatterer]
121121
exact fun s _ ↦ aux (fun t ht ↦ (mem_filter.1 ht).2)
122122
rw [← card_memberSubfamily_add_card_nonMemberSubfamily a]
123-
refine (add_le_add ih₁ ih₀).trans ?_
123+
refine (Nat.add_le_add ih₁ ih₀).trans ?_
124124
rw [← card_union_add_card_inter, ← hℬ, ← card_union_of_disjoint]
125125
swap
126126
· simp only [ℬ, disjoint_left, mem_union, mem_shatterer, mem_image, not_exists, not_and]

0 commit comments

Comments
 (0)