@@ -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