Skip to content

Commit ab8ff45

Browse files
yuanyi-350b-mehta
authored andcommitted
refactor(NumberTheory): golf Mathlib/NumberTheory/SmoothNumbers (leanprover-community#39379)
- simplifies the left inverse in `equivProdNatFactoredNumbers` by proving `¬ p ∣ m` once and then using `factorization_pow_self` and `factorization_eq_zero_of_not_dvd` Extracted from leanprover-community#38144 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
1 parent 9be2998 commit ab8ff45

1 file changed

Lines changed: 11 additions & 21 deletions

File tree

Mathlib/NumberTheory/SmoothNumbers.lean

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -200,32 +200,22 @@ def equivProdNatFactoredNumbers {s : Finset ℕ} {p : ℕ} (hp : p.Prime) (hs :
200200
⟨(m.primeFactorsList.filter (· ∈ s)).prod, prod_mem_factoredNumbers ..⟩)
201201
left_inv := by
202202
rintro ⟨e, m, hm₀, hm⟩
203-
simp (etaStruct := .all) only [Prod.mk.injEq, Subtype.mk.injEq]
203+
have hpm : ¬ p ∣ m := by grind [mem_primeFactorsList]
204+
simp only [Prod.mk.injEq, Subtype.mk.injEq]
204205
constructor
205-
· rw [factorization_mul (pos_iff_ne_zero.mp <| Nat.pow_pos hp.pos) hm₀]
206-
simp only [factorization_pow, Finsupp.coe_add, Finsupp.coe_smul, nsmul_eq_mul,
207-
Pi.natCast_def, cast_id, Pi.add_apply, Pi.mul_apply, hp.factorization_self,
208-
mul_one, add_eq_left]
209-
rw [← primeFactorsList_count_eq, count_eq_zero]
210-
exact fun H ↦ hs (hm p H)
211-
· nth_rewrite 2 [← prod_primeFactorsList hm₀]
206+
· rw [factorization_mul (pow_ne_zero e hp.ne_zero) hm₀, Finsupp.add_apply,
207+
factorization_pow_self hp, factorization_eq_zero_of_not_dvd hpm, add_zero]
208+
· conv_rhs => rw [← prod_primeFactorsList hm₀]
212209
refine prod_eq <|
213210
(filter _ <| perm_primeFactorsList_mul (pow_ne_zero e hp.ne_zero) hm₀).trans ?_
214-
rw [filter_append, hp.primeFactorsList_pow,
215-
filter_eq_nil_iff.mpr fun q hq ↦ by rw [mem_replicate] at hq; simp [hq.2, hs],
216-
nil_append, filter_eq_self.mpr fun q hq ↦ by simp only [hm q hq, decide_true]]
211+
rw [filter_append, hp.primeFactorsList_pow, filter_eq_nil_iff.mpr <| by grind, nil_append,
212+
filter_eq_self.mpr <| by grind]
217213
right_inv := by
218214
rintro ⟨m, hm₀, hm⟩
219-
simp only [Subtype.mk.injEq]
220-
rw [← primeFactorsList_count_eq, ← prod_replicate, ← prod_append]
221-
nth_rewrite 3 [← prod_primeFactorsList hm₀]
222-
have : m.primeFactorsList.filter (· = p) = m.primeFactorsList.filter (· ∉ s) := by
223-
refine (filter_congr fun q hq ↦ ?_).symm
224-
simp only [decide_not]
225-
rcases Finset.mem_insert.mp <| hm _ hq with h | h
226-
· simp only [h, hs, decide_false, Bool.not_false, decide_true]
227-
· simp only [h, decide_true, Bool.not_true, false_eq_decide_iff]
228-
exact fun H ↦ hs <| H ▸ h
215+
rw [Subtype.mk.injEq, ← primeFactorsList_count_eq, ← prod_replicate, ← prod_append]
216+
conv_rhs => rw [← prod_primeFactorsList hm₀]
217+
have : m.primeFactorsList.filter (· = p) = m.primeFactorsList.filter (· ∉ s) :=
218+
filter_congr <| by grind
229219
refine prod_eq <| (filter_eq p).symm ▸ this ▸ perm_append_comm.trans ?_
230220
simp only [decide_not]
231221
exact filter_append_perm (· ∈ s) (primeFactorsList m)

0 commit comments

Comments
 (0)