Skip to content

Commit adaaf29

Browse files
committed
fix: use to_additive (attr := _) here and there (#2073)
1 parent e493d35 commit adaaf29

34 files changed

+261
-281
lines changed

Mathlib/Algebra/BigOperators/Basic.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,14 +332,12 @@ theorem prod_map (s : Finset α) (e : α ↪ γ) (f : γ → β) :
332332
#align finset.prod_map Finset.prod_map
333333
#align finset.sum_map Finset.sum_map
334334

335-
@[congr, to_additive]
335+
@[to_additive (attr := congr)]
336336
theorem prod_congr (h : s₁ = s₂) : (∀ x ∈ s₂, f x = g x) → s₁.prod f = s₂.prod g := by
337337
rw [h]; exact fold_congr
338338
#align finset.prod_congr Finset.prod_congr
339339
#align finset.sum_congr Finset.sum_congr
340340

341-
attribute [congr] Finset.sum_congr
342-
343341
@[to_additive]
344342
theorem prod_disjUnion (h) :
345343
(∏ x in s₁.disjUnion s₂ h, f x) = (∏ x in s₁, f x) * ∏ x in s₂, f x := by

Mathlib/Algebra/BigOperators/Finprod.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,16 +269,14 @@ theorem finprod_congr {f g : α → M} (h : ∀ x, f x = g x) : finprod f = finp
269269
#align finprod_congr finprod_congr
270270
#align finsum_congr finsum_congr
271271

272-
@[congr, to_additive]
272+
@[to_additive (attr := congr)]
273273
theorem finprod_congr_Prop {p q : Prop} {f : p → M} {g : q → M} (hpq : p = q)
274274
(hfg : ∀ h : q, f (hpq.mpr h) = g h) : finprod f = finprod g := by
275275
subst q
276276
exact finprod_congr hfg
277277
#align finprod_congr_Prop finprod_congr_Prop
278278
#align finsum_congr_Prop finsum_congr_Prop
279279

280-
attribute [congr] finsum_congr_Prop
281-
282280
/-- To prove a property of a finite product, it suffices to prove that the property is
283281
multiplicative and holds on the factors. -/
284282
@[to_additive

Mathlib/Algebra/Free.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ theorem mk_mul_mk (x y : α) (L1 L2 : List α) : mk x L1 * mk y L2 = mk x (L1 ++
485485
#align free_semigroup.mk_mul_mk FreeSemigroup.mk_mul_mk
486486

487487
/-- The embedding `α → FreeSemigroup α`. -/
488-
@[to_additive "The embedding `α → free_add_semigroup α`.", simps]
488+
@[to_additive (attr := simps) "The embedding `α → free_add_semigroup α`."]
489489
def of (x : α) : FreeSemigroup α := ⟨x, []⟩
490490
#align free_semigroup.of FreeSemigroup.of
491491

Mathlib/Algebra/Group/Opposite.lean

Lines changed: 42 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -319,50 +319,49 @@ open MulOpposite
319319

320320
/-- Inversion on a group is a `MulEquiv` to the opposite group. When `G` is commutative, there is
321321
`MulEquiv.inv`. -/
322-
@[to_additive
322+
@[to_additive (attr := simps (config := { fullyApplied := false, simpRhs := true }))
323323
"Negation on an additive group is an `AddEquiv` to the opposite group. When `G`
324-
is commutative, there is `AddEquiv.inv`.",
325-
simps (config := { fullyApplied := false, simpRhs := true })]
324+
is commutative, there is `AddEquiv.inv`."]
326325
def MulEquiv.inv' (G : Type _) [DivisionMonoid G] : G ≃* Gᵐᵒᵖ :=
327326
{ (Equiv.inv G).trans opEquiv with map_mul' := fun x y => unop_injective <| mul_inv_rev x y }
328327
#align mul_equiv.inv' MulEquiv.inv'
329328
#align add_equiv.neg' AddEquiv.neg'
330329
#align mul_equiv.inv'_symm_apply MulEquiv.inv'_symmApply
330+
#align add_equiv.inv'_symm_apply AddEquiv.neg'_symmApply
331331

332332
/-- A semigroup homomorphism `f : M →ₙ* N` such that `f x` commutes with `f y` for all `x, y`
333333
defines a semigroup homomorphism to `Nᵐᵒᵖ`. -/
334-
@[to_additive
334+
@[to_additive (attr := simps (config := { fullyApplied := false }))
335335
"An additive semigroup homomorphism `f : AddHom M N` such that `f x` additively
336-
commutes with `f y` for all `x, y` defines an additive semigroup homomorphism to `Sᵃᵒᵖ`.",
337-
simps (config := { fullyApplied := false })]
336+
commutes with `f y` for all `x, y` defines an additive semigroup homomorphism to `Sᵃᵒᵖ`."]
338337
def MulHom.toOpposite {M N : Type _} [Mul M] [Mul N] (f : M →ₙ* N)
339338
(hf : ∀ x y, Commute (f x) (f y)) : M →ₙ* Nᵐᵒᵖ where
340339
toFun := op ∘ f
341340
map_mul' x y := by simp [(hf x y).eq]
342341
#align mul_hom.to_opposite MulHom.toOpposite
343342
#align add_hom.to_opposite AddHom.toOpposite
344343
#align mul_hom.to_opposite_apply MulHom.toOpposite_apply
344+
#align add_hom.to_opposite_apply AddHom.toOpposite_apply
345345

346346
/-- A semigroup homomorphism `f : M →ₙ* N` such that `f x` commutes with `f y` for all `x, y`
347347
defines a semigroup homomorphism from `Mᵐᵒᵖ`. -/
348-
@[to_additive
348+
@[to_additive (attr := simps (config := { fullyApplied := false }))
349349
"An additive semigroup homomorphism `f : AddHom M N` such that `f x` additively
350-
commutes with `f y` for all `x`, `y` defines an additive semigroup homomorphism from `Mᵃᵒᵖ`.",
351-
simps (config := { fullyApplied := false })]
350+
commutes with `f y` for all `x`, `y` defines an additive semigroup homomorphism from `Mᵃᵒᵖ`."]
352351
def MulHom.fromOpposite {M N : Type _} [Mul M] [Mul N] (f : M →ₙ* N)
353352
(hf : ∀ x y, Commute (f x) (f y)) : Mᵐᵒᵖ →ₙ* N where
354353
toFun := f ∘ MulOpposite.unop
355354
map_mul' _ _ := (f.map_mul _ _).trans (hf _ _).eq
356355
#align mul_hom.from_opposite MulHom.fromOpposite
357356
#align add_hom.from_opposite AddHom.fromOpposite
358357
#align mul_hom.from_opposite_apply MulHom.fromOpposite_apply
358+
#align add_hom.from_opposite_apply AddHom.fromOpposite_apply
359359

360360
/-- A monoid homomorphism `f : M →* N` such that `f x` commutes with `f y` for all `x, y` defines
361361
a monoid homomorphism to `Nᵐᵒᵖ`. -/
362-
@[to_additive
362+
@[to_additive (attr := simps (config := { fullyApplied := false }))
363363
"An additive monoid homomorphism `f : M →+ N` such that `f x` additively commutes
364-
with `f y` for all `x, y` defines an additive monoid homomorphism to `Sᵃᵒᵖ`.",
365-
simps (config := { fullyApplied := false })]
364+
with `f y` for all `x, y` defines an additive monoid homomorphism to `Sᵃᵒᵖ`."]
366365
def MonoidHom.toOpposite {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
367366
(hf : ∀ x y, Commute (f x) (f y)) : M →* Nᵐᵒᵖ where
368367
toFun := op ∘ f
@@ -371,13 +370,13 @@ def MonoidHom.toOpposite {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M
371370
#align monoid_hom.to_opposite MonoidHom.toOpposite
372371
#align add_monoid_hom.to_opposite AddMonoidHom.toOpposite
373372
#align monoid_hom.to_opposite_apply MonoidHom.toOpposite_apply
373+
#align add_monoid_hom.to_opposite_apply AddMonoidHom.toOpposite_apply
374374

375375
/-- A monoid homomorphism `f : M →* N` such that `f x` commutes with `f y` for all `x, y` defines
376376
a monoid homomorphism from `Mᵐᵒᵖ`. -/
377-
@[to_additive
377+
@[to_additive (attr := simps (config := { fullyApplied := false }))
378378
"An additive monoid homomorphism `f : M →+ N` such that `f x` additively commutes
379-
with `f y` for all `x`, `y` defines an additive monoid homomorphism from `Mᵃᵒᵖ`.",
380-
simps (config := { fullyApplied := false })]
379+
with `f y` for all `x`, `y` defines an additive monoid homomorphism from `Mᵃᵒᵖ`."]
381380
def MonoidHom.fromOpposite {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M →* N)
382381
(hf : ∀ x y, Commute (f x) (f y)) : Mᵐᵒᵖ →* N where
383382
toFun := f ∘ MulOpposite.unop
@@ -386,6 +385,7 @@ def MonoidHom.fromOpposite {M N : Type _} [MulOneClass M] [MulOneClass N] (f : M
386385
#align monoid_hom.from_opposite MonoidHom.fromOpposite
387386
#align add_monoid_hom.from_opposite AddMonoidHom.fromOpposite
388387
#align monoid_hom.from_opposite_apply MonoidHom.fromOpposite_apply
388+
#align add_monoid_hom.from_opposite_apply AddMonoidHom.fromOpposite_apply
389389

390390
/-- The units of the opposites are equivalent to the opposites of the units. -/
391391
@[to_additive
@@ -416,32 +416,28 @@ theorem Units.coe_opEquiv_symm {M} [Monoid M] (u : Mˣᵐᵒᵖ) :
416416

417417
/-- A semigroup homomorphism `M →ₙ* N` can equivalently be viewed as a semigroup homomorphism
418418
`Mᵐᵒᵖ →ₙ* Nᵐᵒᵖ`. This is the action of the (fully faithful) `ᵐᵒᵖ`-functor on morphisms. -/
419-
@[to_additive
419+
@[to_additive (attr := simps)
420420
"An additive semigroup homomorphism `AddHom M N` can equivalently be viewed as an
421421
additive semigroup homomorphism `AddHom Mᵃᵒᵖ Nᵃᵒᵖ`. This is the action of the
422-
(fully faithful)`ᵃᵒᵖ`-functor on morphisms.",
423-
simps]
422+
(fully faithful)`ᵃᵒᵖ`-functor on morphisms."]
424423
def MulHom.op {M N} [Mul M] [Mul N] : (M →ₙ* N) ≃ (Mᵐᵒᵖ →ₙ* Nᵐᵒᵖ) where
425424
toFun f :=
426425
{ toFun := MulOpposite.op ∘ f ∘ unop,
427426
map_mul' := fun x y => unop_injective (f.map_mul y.unop x.unop) }
428427
invFun f :=
429428
{ toFun := unop ∘ f ∘ MulOpposite.op,
430429
map_mul' := fun x y => congrArg unop (f.map_mul (MulOpposite.op y) (MulOpposite.op x)) }
431-
left_inv f := by
432-
ext
433-
rfl
434-
right_inv f := by
435-
ext x
436-
simp
430+
left_inv _ := rfl
431+
right_inv _ := rfl
437432
#align mul_hom.op MulHom.op
438433
#align add_hom.op AddHom.op
439434
#align mul_hom.op_symm_apply_apply MulHom.op_symm_apply_apply
440435
#align mul_hom.op_apply_apply MulHom.op_apply_apply
436+
#align add_hom.op_symm_apply_apply AddHom.op_symm_apply_apply
437+
#align add_hom.op_apply_apply AddHom.op_apply_apply
441438

442439
/-- The 'unopposite' of a semigroup homomorphism `Mᵐᵒᵖ →ₙ* Nᵐᵒᵖ`. Inverse to `MulHom.op`. -/
443-
@[simp,
444-
to_additive
440+
@[to_additive (attr := simp)
445441
"The 'unopposite' of an additive semigroup homomorphism `Mᵃᵒᵖ →ₙ+ Nᵃᵒᵖ`. Inverse
446442
to `AddHom.op`."]
447443
def MulHom.unop {M N} [Mul M] [Mul N] : (Mᵐᵒᵖ →ₙ* Nᵐᵒᵖ) ≃ (M →ₙ* N) :=
@@ -461,14 +457,8 @@ def AddHom.mulOp {M N} [Add M] [Add N] : AddHom M N ≃ AddHom Mᵐᵒᵖ Nᵐ
461457
{ toFun := MulOpposite.unop ∘ f ∘ MulOpposite.op,
462458
map_add' :=
463459
fun x y => congrArg MulOpposite.unop (f.map_add (MulOpposite.op x) (MulOpposite.op y)) }
464-
left_inv f := by
465-
apply AddHom.ext
466-
intro x
467-
simp
468-
right_inv f := by
469-
apply AddHom.ext
470-
intro x
471-
simp
460+
left_inv _ := rfl
461+
right_inv _ := rfl
472462
#align add_hom.mul_op AddHom.mulOp
473463
#align add_hom.mul_op_symm_apply_apply AddHom.mulOp_symm_apply_apply
474464
#align add_hom.mul_op_apply_apply AddHom.mulOp_apply_apply
@@ -482,32 +472,28 @@ def AddHom.mulUnop {α β} [Add α] [Add β] : AddHom αᵐᵒᵖ βᵐᵒᵖ
482472

483473
/-- A monoid homomorphism `M →* N` can equivalently be viewed as a monoid homomorphism
484474
`Mᵐᵒᵖ →* Nᵐᵒᵖ`. This is the action of the (fully faithful) `ᵐᵒᵖ`-functor on morphisms. -/
485-
@[to_additive
475+
@[to_additive (attr := simps)
486476
"An additive monoid homomorphism `M →+ N` can equivalently be viewed as an
487477
additive monoid homomorphism `Mᵃᵒᵖ →+ Nᵃᵒᵖ`. This is the action of the (fully faithful)
488-
`ᵃᵒᵖ`-functor on morphisms.",
489-
simps]
478+
`ᵃᵒᵖ`-functor on morphisms."]
490479
def MonoidHom.op {M N} [MulOneClass M] [MulOneClass N] : (M →* N) ≃ (Mᵐᵒᵖ →* Nᵐᵒᵖ) where
491480
toFun f :=
492481
{ toFun := MulOpposite.op ∘ f ∘ unop, map_one' := congrArg MulOpposite.op f.map_one,
493482
map_mul' := fun x y => unop_injective (f.map_mul y.unop x.unop) }
494483
invFun f :=
495484
{ toFun := unop ∘ f ∘ MulOpposite.op, map_one' := congrArg unop f.map_one,
496485
map_mul' := fun x y => congrArg unop (f.map_mul (MulOpposite.op y) (MulOpposite.op x)) }
497-
left_inv f := by
498-
ext
499-
rfl
500-
right_inv f := by
501-
ext x
502-
simp
486+
left_inv _ := rfl
487+
right_inv _ := rfl
503488
#align monoid_hom.op MonoidHom.op
504489
#align add_monoid_hom.op AddMonoidHom.op
505490
#align monoid_hom.op_apply_apply MonoidHom.op_apply_apply
506491
#align monoid_hom.op_symm_apply_apply MonoidHom.op_symm_apply_apply
492+
#align add_monoid_hom.op_apply_apply AddMonoidHom.op_apply_apply
493+
#align add_monoid_hom.op_symm_apply_apply AddMonoidHom.op_symm_apply_apply
507494

508495
/-- The 'unopposite' of a monoid homomorphism `Mᵐᵒᵖ →* Nᵐᵒᵖ`. Inverse to `MonoidHom.op`. -/
509-
@[simp,
510-
to_additive
496+
@[to_additive (attr := simps)
511497
"The 'unopposite' of an additive monoid homomorphism `Mᵃᵒᵖ →+ Nᵃᵒᵖ`. Inverse to
512498
`AddMonoidHom.op`."]
513499
def MonoidHom.unop {M N} [MulOneClass M] [MulOneClass N] : (Mᵐᵒᵖ →* Nᵐᵒᵖ) ≃ (M →* N) :=
@@ -527,14 +513,8 @@ def AddMonoidHom.mulOp {M N} [AddZeroClass M] [AddZeroClass N] : (M →+ N) ≃
527513
map_zero' := congrArg MulOpposite.unop f.map_zero,
528514
map_add' :=
529515
fun x y => congrArg MulOpposite.unop (f.map_add (MulOpposite.op x) (MulOpposite.op y)) }
530-
left_inv f := by
531-
apply AddMonoidHom.ext
532-
intro
533-
simp [MulOpposite.op, MulOpposite.unop]
534-
right_inv f := by
535-
apply AddMonoidHom.ext
536-
intro
537-
simp
516+
left_inv _ := rfl
517+
right_inv _ := rfl
538518
#align add_monoid_hom.mul_op AddMonoidHom.mulOp
539519
#align add_monoid_hom.mul_op_symm_apply_apply AddMonoidHom.mulOp_symm_apply_apply
540520
#align add_monoid_hom.mul_op_apply_apply AddMonoidHom.mulOp_apply_apply
@@ -551,14 +531,8 @@ def AddMonoidHom.mulUnop {α β} [AddZeroClass α] [AddZeroClass β] : (αᵐᵒ
551531
def AddEquiv.mulOp {α β} [Add α] [Add β] : α ≃+ β ≃ (αᵐᵒᵖ ≃+ βᵐᵒᵖ) where
552532
toFun f := opAddEquiv.symm.trans (f.trans opAddEquiv)
553533
invFun f := opAddEquiv.trans (f.trans opAddEquiv.symm)
554-
left_inv f := by
555-
apply AddEquiv.ext
556-
intro
557-
simp [MulOpposite.op, MulOpposite.unop]
558-
right_inv f := by
559-
apply AddEquiv.ext
560-
intro
561-
rfl
534+
left_inv _ := rfl
535+
right_inv _ := rfl
562536
#align add_equiv.mul_op AddEquiv.mulOp
563537
#align add_equiv.mul_op_apply AddEquiv.mulOp_apply
564538
#align add_equiv.mul_op_symm_apply AddEquiv.mulOp_symm_apply
@@ -570,8 +544,7 @@ def AddEquiv.mulUnop {α β} [Add α] [Add β] : αᵐᵒᵖ ≃+ βᵐᵒᵖ
570544
#align add_equiv.mul_unop AddEquiv.mulUnop
571545

572546
/-- A iso `α ≃* β` can equivalently be viewed as an iso `αᵐᵒᵖ ≃* βᵐᵒᵖ`. -/
573-
@[to_additive
574-
"A iso `α ≃+ β` can equivalently be viewed as an iso `αᵃᵒᵖ ≃+ βᵃᵒᵖ`.", simps]
547+
@[to_additive (attr := simps) "A iso `α ≃+ β` can equivalently be viewed as an iso `αᵃᵒᵖ ≃+ βᵃᵒᵖ`."]
575548
def MulEquiv.op {α β} [Mul α] [Mul β] : α ≃* β ≃ (αᵐᵒᵖ ≃* βᵐᵒᵖ) where
576549
toFun f :=
577550
{ toFun := MulOpposite.op ∘ f ∘ unop, invFun := MulOpposite.op ∘ f.symm ∘ unop,
@@ -583,19 +556,18 @@ def MulEquiv.op {α β} [Mul α] [Mul β] : α ≃* β ≃ (αᵐᵒᵖ ≃* β
583556
left_inv := fun x => by simp,
584557
right_inv := fun x => by simp,
585558
map_mul' := fun x y => congr_arg unop (f.map_mul (MulOpposite.op y) (MulOpposite.op x)) }
586-
left_inv f := by
587-
ext
588-
rfl
589-
right_inv f := by
590-
ext
591-
simp
592-
rfl
559+
left_inv _ := rfl
560+
right_inv _ := rfl
593561
#align mul_equiv.op MulEquiv.op
594562
#align add_equiv.op AddEquiv.op
595563
#align mul_equiv.op_symm_apply_symm_apply MulEquiv.op_symm_apply_symmApply
596564
#align mul_equiv.op_apply_apply MulEquiv.op_apply_apply
597565
#align mul_equiv.op_apply_symm_apply MulEquiv.op_apply_symmApply
598566
#align mul_equiv.op_symm_apply_apply MulEquiv.op_symm_apply_apply
567+
#align add_equiv.op_symm_apply_symm_apply AddEquiv.op_symm_apply_symmApply
568+
#align add_equiv.op_apply_apply AddEquiv.op_apply_apply
569+
#align add_equiv.op_apply_symm_apply AddEquiv.op_apply_symmApply
570+
#align add_equiv.op_symm_apply_apply AddEquiv.op_symm_apply_apply
599571

600572
/-- The 'unopposite' of an iso `αᵐᵒᵖ ≃* βᵐᵒᵖ`. Inverse to `MulEquiv.op`. -/
601573
@[to_additive (attr := simp)

0 commit comments

Comments
 (0)