@@ -309,35 +309,35 @@ theorem noncommProd_empty (f : α → β) (h) : noncommProd (∅ : Finset α) f
309
309
#align finset.noncomm_prod_empty Finset.noncommProd_empty
310
310
#align finset.noncomm_sum_empty Finset.noncommSum_empty
311
311
312
+ @[to_additive (attr := simp)]
313
+ theorem noncommProd_cons (s : Finset α) (a : α) (f : α → β)
314
+ (ha : a ∉ s) (comm) :
315
+ noncommProd (cons a s ha) f comm =
316
+ f a * noncommProd s f (comm.mono fun _ => Finset.mem_cons.2 ∘ .inr) := by
317
+ simp_rw [noncommProd, Finset.cons_val, Multiset.map_cons, Multiset.noncommProd_cons]
318
+
319
+ @[to_additive]
320
+ theorem noncommProd_cons' (s : Finset α) (a : α) (f : α → β)
321
+ (ha : a ∉ s) (comm) :
322
+ noncommProd (cons a s ha) f comm =
323
+ noncommProd s f (comm.mono fun _ => Finset.mem_cons.2 ∘ .inr) * f a := by
324
+ simp_rw [noncommProd, Finset.cons_val, Multiset.map_cons, Multiset.noncommProd_cons']
325
+
312
326
@[to_additive (attr := simp)]
313
327
theorem noncommProd_insert_of_not_mem [DecidableEq α] (s : Finset α) (a : α) (f : α → β) (comm)
314
328
(ha : a ∉ s) :
315
329
noncommProd (insert a s) f comm =
316
- f a * noncommProd s f (comm.mono fun _ => mem_insert_of_mem) :=
317
- calc noncommProd (insert a s) f comm
318
- = Multiset.noncommProd ((insert a s).val.map f) _ := rfl
319
- _ = Multiset.noncommProd (f a ::ₘ s.1 .map f)
320
- (by convert noncommProd_lemma _ f comm using 3
321
- simp [@eq_comm _ (f a)]) := by
322
- { congr
323
- rw [insert_val_of_not_mem ha, Multiset.map_cons] }
324
- _ = _ := by rw [Multiset.noncommProd_cons, noncommProd]
330
+ f a * noncommProd s f (comm.mono fun _ => mem_insert_of_mem) := by
331
+ simp only [← cons_eq_insert _ _ ha, noncommProd_cons]
325
332
#align finset.noncomm_prod_insert_of_not_mem Finset.noncommProd_insert_of_not_mem
326
333
#align finset.noncomm_sum_insert_of_not_mem Finset.noncommSum_insert_of_not_mem
327
334
328
335
@[to_additive]
329
336
theorem noncommProd_insert_of_not_mem' [DecidableEq α] (s : Finset α) (a : α) (f : α → β) (comm)
330
337
(ha : a ∉ s) :
331
338
noncommProd (insert a s) f comm =
332
- noncommProd s f (comm.mono fun _ => mem_insert_of_mem) * f a :=
333
- calc noncommProd (insert a s) f comm
334
- = Multiset.noncommProd ((insert a s).val.map f) _ := rfl
335
- _ = Multiset.noncommProd (f a ::ₘ s.1 .map f)
336
- (by convert noncommProd_lemma _ f comm using 3
337
- simp [@eq_comm _ (f a)]) := by
338
- { congr
339
- rw [insert_val_of_not_mem ha, Multiset.map_cons] }
340
- _ = _ := by rw [Multiset.noncommProd_cons', noncommProd]
339
+ noncommProd s f (comm.mono fun _ => mem_insert_of_mem) * f a := by
340
+ simp only [← cons_eq_insert _ _ ha, noncommProd_cons']
341
341
#align finset.noncomm_prod_insert_of_not_mem' Finset.noncommProd_insert_of_not_mem'
342
342
#align finset.noncomm_sum_insert_of_not_mem' Finset.noncommSum_insert_of_not_mem'
343
343
@@ -398,10 +398,9 @@ theorem noncommProd_erase_mul [DecidableEq α] (s : Finset α) {a : α} (h : a
398
398
@[to_additive]
399
399
theorem noncommProd_eq_prod {β : Type *} [CommMonoid β] (s : Finset α) (f : α → β) :
400
400
(noncommProd s f fun _ _ _ _ _ => Commute.all _ _) = s.prod f := by
401
- classical
402
- induction' s using Finset.induction_on with a s ha IH
403
- · simp
404
- · simp [ha, IH]
401
+ induction' s using Finset.cons_induction_on with a s ha IH
402
+ · simp
403
+ · simp [ha, IH]
405
404
#align finset.noncomm_prod_eq_prod Finset.noncommProd_eq_prod
406
405
#align finset.noncomm_sum_eq_sum Finset.noncommSum_eq_sum
407
406
@@ -444,20 +443,13 @@ theorem noncommProd_mul_distrib_aux {s : Finset α} {f : α → β} {g : α →
444
443
theorem noncommProd_mul_distrib {s : Finset α} (f : α → β) (g : α → β) (comm_ff comm_gg comm_gf) :
445
444
noncommProd s (f * g) (noncommProd_mul_distrib_aux comm_ff comm_gg comm_gf) =
446
445
noncommProd s f comm_ff * noncommProd s g comm_gg := by
447
- classical
448
- induction' s using Finset.induction_on with x s hnmem ih
449
- · simp
450
- simp only [Finset.noncommProd_insert_of_not_mem _ _ _ _ hnmem]
451
- specialize
452
- ih (comm_ff.mono fun _ => mem_insert_of_mem) (comm_gg.mono fun _ => mem_insert_of_mem)
453
- (comm_gf.mono fun _ => mem_insert_of_mem)
454
- rw [ih, Pi.mul_apply]
455
- simp only [mul_assoc]
456
- congr 1
457
- simp only [← mul_assoc]
458
- congr 1
459
- refine' noncommProd_commute _ _ _ _ fun y hy => _
460
- exact comm_gf (mem_insert_self x s) (mem_insert_of_mem hy) (ne_of_mem_of_not_mem hy hnmem).symm
446
+ induction' s using Finset.cons_induction_on with x s hnmem ih
447
+ · simp
448
+ rw [Finset.noncommProd_cons, Finset.noncommProd_cons, Finset.noncommProd_cons, Pi.mul_apply,
449
+ ih (comm_ff.mono fun _ => mem_cons_of_mem) (comm_gg.mono fun _ => mem_cons_of_mem)
450
+ (comm_gf.mono fun _ => mem_cons_of_mem),
451
+ (noncommProd_commute _ _ _ _ fun y hy => ?_).mul_mul_mul_comm]
452
+ exact comm_gf (mem_cons_self x s) (mem_cons_of_mem hy) (ne_of_mem_of_not_mem hy hnmem).symm
461
453
#align finset.noncomm_prod_mul_distrib Finset.noncommProd_mul_distrib
462
454
#align finset.noncomm_sum_add_distrib Finset.noncommSum_add_distrib
463
455
0 commit comments