Transfer algebraic structures across Equivs #
In this file we prove lemmas of the following form: if β has a group structure and α ≃ β
then α has a group structure, and similarly for monoids, semigroups and so on.
Implementation details #
When adding new definitions that transfer type-classes across an equivalence, please use
abbrev. See note [reducible non-instances].
For many type classes, we have a definition that lets us transfer instances from one type to another
using an equivalence, such as Equiv.mul for Mul.
Constructing data instances in this way is discouraged because the resulting data is inefficient
to unfold. To somewhat mitigate this problem, in these definitions we don't write the
projections on Equiv in the usual way using Equiv.symm and DFunLike.coe, and instead use
Equiv.toFun and Equiv.invFun directly. As a result, unification has to do less unfolding.
Note also that when constructing data instances in this way, it usually helps to use
fast_instance% to get a faster instance.
Instances For
An equivalence e : α ≃ β gives a multiplicative equivalence α ≃* β where
the multiplicative structure on α is the one obtained by transporting a multiplicative structure
on β back along e.
Instances For
An equivalence e : α ≃ β gives an additive equivalence α ≃+ β where
the additive structure on α is the one obtained by transporting an additive structure
on β back along e.
Instances For
Transfer add_semigroup across an Equiv
Equations
- e.addSemigroup = Function.Injective.addSemigroup ⇑e ⋯ ⋯
Instances For
Transfer CommSemigroup across an Equiv
Equations
Instances For
Transfer AddCommSemigroup across an Equiv
Equations
Instances For
Transfer IsLeftCancelMul across an Equiv
Transfer IsLeftCancelAdd across an Equiv
Transfer IsRightCancelMul across an Equiv
Transfer IsRightCancelAdd across an Equiv
Transfer IsCancelMul across an Equiv
Transfer IsCancelAdd across an Equiv
Transfer MulOneClass across an Equiv
Equations
- e.mulOneClass = Function.Injective.mulOneClass ⇑e ⋯ ⋯ ⋯
Instances For
Transfer AddZeroClass across an Equiv
Equations
- e.addZeroClass = Function.Injective.addZeroClass ⇑e ⋯ ⋯ ⋯
Instances For
Transfer CommMonoid across an Equiv
Equations
- e.commMonoid = Function.Injective.commMonoid ⇑e ⋯ ⋯ ⋯ ⋯
Instances For
Transfer AddCommMonoid across an Equiv
Equations
- e.addCommMonoid = Function.Injective.addCommMonoid ⇑e ⋯ ⋯ ⋯ ⋯
Instances For
Transfer AddCommGroup across an Equiv
Equations
- e.addCommGroup = Function.Injective.addCommGroup ⇑e ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯