Documentation

Mathlib.Algebra.Equiv.TransferInstance

Transfer algebraic structures across Equivs #

In this file we prove theorems of the following form: if β has a group structure and α ≃ β then α has a group structure, and similarly for monoids, semigroups, rings, integral domains, fields and so on.

Note that most of these constructions can also be obtained using the transport tactic.

Implementation details #

When adding new definitions that transfer type-classes across an equivalence, please use abbrev. See note [reducible non-instances].

Tags #

equiv, group, ring, field, module, algebra

@[reducible, inline]
abbrev Equiv.one {α : Type u} {β : Type v} (e : α β) [One β] :
One α

Transfer One across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.zero {α : Type u} {β : Type v} (e : α β) [Zero β] :
Zero α

Transfer Zero across an Equiv

Equations
theorem Equiv.one_def {α : Type u} {β : Type v} (e : α β) [One β] :
1 = e.symm 1
theorem Equiv.zero_def {α : Type u} {β : Type v} (e : α β) [Zero β] :
0 = e.symm 0
noncomputable instance Equiv.instOneShrink {α : Type u} [Small.{v, u} α] [One α] :
Equations
noncomputable instance Equiv.instZeroShrink {α : Type u} [Small.{v, u} α] [Zero α] :
Equations
@[reducible, inline]
abbrev Equiv.mul {α : Type u} {β : Type v} (e : α β) [Mul β] :
Mul α

Transfer Mul across an Equiv

Equations
  • e.mul = { mul := fun (x y : α) => e.symm (e x * e y) }
@[reducible, inline]
abbrev Equiv.add {α : Type u} {β : Type v} (e : α β) [Add β] :
Add α

Transfer Add across an Equiv

Equations
  • e.add = { add := fun (x y : α) => e.symm (e x + e y) }
theorem Equiv.mul_def {α : Type u} {β : Type v} (e : α β) [Mul β] (x y : α) :
x * y = e.symm (e x * e y)
theorem Equiv.add_def {α : Type u} {β : Type v} (e : α β) [Add β] (x y : α) :
x + y = e.symm (e x + e y)
noncomputable instance Equiv.instMulShrink {α : Type u} [Small.{v, u} α] [Mul α] :
Equations
noncomputable instance Equiv.instAddShrink {α : Type u} [Small.{v, u} α] [Add α] :
Equations
@[reducible, inline]
abbrev Equiv.div {α : Type u} {β : Type v} (e : α β) [Div β] :
Div α

Transfer Div across an Equiv

Equations
  • e.div = { div := fun (x y : α) => e.symm (e x / e y) }
@[reducible, inline]
abbrev Equiv.sub {α : Type u} {β : Type v} (e : α β) [Sub β] :
Sub α

Transfer Sub across an Equiv

Equations
  • e.sub = { sub := fun (x y : α) => e.symm (e x - e y) }
theorem Equiv.div_def {α : Type u} {β : Type v} (e : α β) [Div β] (x y : α) :
x / y = e.symm (e x / e y)
theorem Equiv.sub_def {α : Type u} {β : Type v} (e : α β) [Sub β] (x y : α) :
x - y = e.symm (e x - e y)
noncomputable instance Equiv.instDivShrink {α : Type u} [Small.{v, u} α] [Div α] :
Equations
noncomputable instance Equiv.instSubShrink {α : Type u} [Small.{v, u} α] [Sub α] :
Equations
@[reducible, inline]
abbrev Equiv.Inv {α : Type u} {β : Type v} (e : α β) [Inv β] :
Inv α

Transfer Inv across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.Neg {α : Type u} {β : Type v} (e : α β) [Neg β] :
Neg α

Transfer Neg across an Equiv

Equations
  • e.Neg = { neg := fun (x : α) => e.symm (-e x) }
theorem Equiv.inv_def {α : Type u} {β : Type v} (e : α β) [Inv β] (x : α) :
x⁻¹ = e.symm (e x)⁻¹
theorem Equiv.neg_def {α : Type u} {β : Type v} (e : α β) [Neg β] (x : α) :
-x = e.symm (-e x)
noncomputable instance Equiv.instInvShrink {α : Type u} [Small.{v, u} α] [Inv α] :
Equations
noncomputable instance Equiv.instNegShrink {α : Type u} [Small.{v, u} α] [Neg α] :
Equations
@[reducible, inline]
abbrev Equiv.smul {α : Type u} {β : Type v} (e : α β) (R : Type u_1) [SMul R β] :
SMul R α

Transfer SMul across an Equiv

Equations
  • e.smul R = { smul := fun (r : R) (x : α) => e.symm (r e x) }
theorem Equiv.smul_def {α : Type u} {β : Type v} (e : α β) {R : Type u_1} [SMul R β] (r : R) (x : α) :
r x = e.symm (r e x)
noncomputable instance Equiv.instSMulShrink {α : Type u} [Small.{v, u} α] (R : Type u_1) [SMul R α] :
Equations
@[reducible]
def Equiv.pow {α : Type u} {β : Type v} (e : α β) (N : Type u_1) [Pow β N] :
Pow α N

Transfer Pow across an Equiv

Equations
  • e.pow N = { pow := fun (x : α) (n : N) => e.symm (e x ^ n) }
theorem Equiv.pow_def {α : Type u} {β : Type v} (e : α β) {N : Type u_1} [Pow β N] (n : N) (x : α) :
x ^ n = e.symm (e x ^ n)
noncomputable instance Equiv.instPowShrink {α : Type u} [Small.{v, u} α] (N : Type u_1) [Pow α N] :
Equations
def Equiv.mulEquiv {α : Type u} {β : Type v} (e : α β) [Mul β] :
let x := e.mul; α ≃* β

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.

Equations
  • e.mulEquiv = { toEquiv := e, map_mul' := }
def Equiv.addEquiv {α : Type u} {β : Type v} (e : α β) [Add β] :
let x := e.add; α ≃+ β

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.

Equations
  • e.addEquiv = { toEquiv := e, map_add' := }
@[simp]
theorem Equiv.mulEquiv_apply {α : Type u} {β : Type v} (e : α β) [Mul β] (a : α) :
e.mulEquiv a = e a
@[simp]
theorem Equiv.addEquiv_apply {α : Type u} {β : Type v} (e : α β) [Add β] (a : α) :
e.addEquiv a = e a
theorem Equiv.mulEquiv_symm_apply {α : Type u} {β : Type v} (e : α β) [Mul β] (b : β) :
theorem Equiv.addEquiv_symm_apply {α : Type u} {β : Type v} (e : α β) [Add β] (b : β) :
noncomputable def Shrink.mulEquiv {α : Type u} [Small.{v, u} α] [Mul α] :

Shrink α to a smaller universe preserves multiplication.

Equations
noncomputable def Shrink.addEquiv {α : Type u} [Small.{v, u} α] [Add α] :

Shrink α to a smaller universe preserves addition.

Equations
def Equiv.ringEquiv {α : Type u} {β : Type v} (e : α β) [Add β] [Mul β] :
let add := e.add; let mul := e.mul; α ≃+* β

An equivalence e : α ≃ β gives a ring equivalence α ≃+* β where the ring structure on α is the one obtained by transporting a ring structure on β back along e.

Equations
  • e.ringEquiv = { toEquiv := e, map_mul' := , map_add' := }
@[simp]
theorem Equiv.ringEquiv_apply {α : Type u} {β : Type v} (e : α β) [Add β] [Mul β] (a : α) :
e.ringEquiv a = e a
theorem Equiv.ringEquiv_symm_apply {α : Type u} {β : Type v} (e : α β) [Add β] [Mul β] (b : β) :
noncomputable def Shrink.ringEquiv (α : Type u) [Small.{v, u} α] [Add α] [Mul α] :

Shrink α to a smaller universe preserves ring structure.

Equations
@[reducible, inline]
abbrev Equiv.semigroup {α : Type u} {β : Type v} (e : α β) [Semigroup β] :

Transfer Semigroup across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addSemigroup {α : Type u} {β : Type v} (e : α β) [AddSemigroup β] :

Transfer add_semigroup across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.semigroupWithZero {α : Type u} {β : Type v} (e : α β) [SemigroupWithZero β] :

Transfer SemigroupWithZero across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.commSemigroup {α : Type u} {β : Type v} (e : α β) [CommSemigroup β] :

Transfer CommSemigroup across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addCommSemigroup {α : Type u} {β : Type v} (e : α β) [AddCommSemigroup β] :

Transfer AddCommSemigroup across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.mulZeroClass {α : Type u} {β : Type v} (e : α β) [MulZeroClass β] :

Transfer MulZeroClass across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.mulOneClass {α : Type u} {β : Type v} (e : α β) [MulOneClass β] :

Transfer MulOneClass across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addZeroClass {α : Type u} {β : Type v} (e : α β) [AddZeroClass β] :

Transfer AddZeroClass across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.mulZeroOneClass {α : Type u} {β : Type v} (e : α β) [MulZeroOneClass β] :

Transfer MulZeroOneClass across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.monoid {α : Type u} {β : Type v} (e : α β) [Monoid β] :

Transfer Monoid across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addMonoid {α : Type u} {β : Type v} (e : α β) [AddMonoid β] :

Transfer AddMonoid across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.commMonoid {α : Type u} {β : Type v} (e : α β) [CommMonoid β] :

Transfer CommMonoid across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addCommMonoid {α : Type u} {β : Type v} (e : α β) [AddCommMonoid β] :

Transfer AddCommMonoid across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.group {α : Type u} {β : Type v} (e : α β) [Group β] :

Transfer Group across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addGroup {α : Type u} {β : Type v} (e : α β) [AddGroup β] :

Transfer AddGroup across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.commGroup {α : Type u} {β : Type v} (e : α β) [CommGroup β] :

Transfer CommGroup across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addCommGroup {α : Type u} {β : Type v} (e : α β) [AddCommGroup β] :

Transfer AddCommGroup across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.nonUnitalSemiring {α : Type u} {β : Type v} (e : α β) [NonUnitalSemiring β] :

Transfer NonUnitalSemiring across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addMonoidWithOne {α : Type u} {β : Type v} (e : α β) [AddMonoidWithOne β] :

Transfer AddMonoidWithOne across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.addGroupWithOne {α : Type u} {β : Type v} (e : α β) [AddGroupWithOne β] :

Transfer AddGroupWithOne across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.nonAssocSemiring {α : Type u} {β : Type v} (e : α β) [NonAssocSemiring β] :

Transfer NonAssocSemiring across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.semiring {α : Type u} {β : Type v} (e : α β) [Semiring β] :

Transfer Semiring across an Equiv

Equations
@[reducible, inline]

Transfer NonUnitalCommSemiring across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.commSemiring {α : Type u} {β : Type v} (e : α β) [CommSemiring β] :

Transfer CommSemiring across an Equiv

Equations
@[reducible, inline]

Transfer NonUnitalNonAssocRing across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.nonUnitalRing {α : Type u} {β : Type v} (e : α β) [NonUnitalRing β] :

Transfer NonUnitalRing across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.nonAssocRing {α : Type u} {β : Type v} (e : α β) [NonAssocRing β] :

Transfer NonAssocRing across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.ring {α : Type u} {β : Type v} (e : α β) [Ring β] :
Ring α

Transfer Ring across an Equiv

Equations
noncomputable instance Equiv.instRingShrink {α : Type u} [Small.{v, u} α] [Ring α] :
Equations
@[reducible, inline]
abbrev Equiv.nonUnitalCommRing {α : Type u} {β : Type v} (e : α β) [NonUnitalCommRing β] :

Transfer NonUnitalCommRing across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.commRing {α : Type u} {β : Type v} (e : α β) [CommRing β] :

Transfer CommRing across an Equiv

Equations
theorem Equiv.nontrivial {α : Type u} {β : Type v} (e : α β) [Nontrivial β] :

Transfer Nontrivial across an Equiv

theorem Equiv.isDomain {α : Type u} {β : Type v} [Semiring α] [Semiring β] [IsDomain β] (e : α ≃+* β) :

Transfer IsDomain across an Equiv

@[reducible, inline]
abbrev Equiv.nnratCast {α : Type u} {β : Type v} (e : α β) [NNRatCast β] :

Transfer NNRatCast across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.ratCast {α : Type u} {β : Type v} (e : α β) [RatCast β] :

Transfer RatCast across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.divisionRing {α : Type u} {β : Type v} (e : α β) [DivisionRing β] :

Transfer DivisionRing across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.field {α : Type u} {β : Type v} (e : α β) [Field β] :

Transfer Field across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.mulAction {α : Type u} {β : Type v} (R : Type u_1) [Monoid R] (e : α β) [MulAction R β] :

Transfer MulAction across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.distribMulAction {α : Type u} {β : Type v} (R : Type u_1) [Monoid R] (e : α β) [AddCommMonoid β] [DistribMulAction R β] :

Transfer DistribMulAction across an Equiv

Equations
@[reducible, inline]
abbrev Equiv.module {α : Type u} {β : Type v} (R : Type u_1) [Semiring R] (e : α β) [AddCommMonoid β] :
let x := e.addCommMonoid; [inst : Module R β] → Module R α

Transfer Module across an Equiv

Equations
noncomputable instance Equiv.instModuleShrink {α : Type u} (R : Type u_1) [Semiring R] [Small.{v, u} α] [AddCommMonoid α] [Module R α] :
Equations
def Equiv.linearEquiv {α : Type u} {β : Type v} (R : Type u_1) [Semiring R] (e : α β) [AddCommMonoid β] [Module R β] :
let addCommMonoid := e.addCommMonoid; let module := Equiv.module R e; α ≃ₗ[R] β

An equivalence e : α ≃ β gives a linear equivalence α ≃ₗ[R] β where the R-module structure on α is the one obtained by transporting an R-module structure on β back along e.

Equations
noncomputable def Shrink.linearEquiv (α : Type u) (R : Type u_1) [Semiring R] [Small.{v, u} α] [AddCommMonoid α] [Module R α] :

Shrink α to a smaller universe preserves module structure.

Equations
@[simp]
theorem Shrink.linearEquiv_apply (α : Type u) (R : Type u_1) [Semiring R] [Small.{v, u} α] [AddCommMonoid α] [Module R α] (a✝ : Shrink.{v, u} α) :
(linearEquiv α R) a✝ = (equivShrink α).symm a✝
@[simp]
theorem Shrink.linearEquiv_symm_apply (α : Type u) (R : Type u_1) [Semiring R] [Small.{v, u} α] [AddCommMonoid α] [Module R α] (a✝ : α) :
@[reducible, inline]
abbrev Equiv.algebra {α : Type u} {β : Type v} (R : Type u_1) [CommSemiring R] (e : α β) [Semiring β] :
let x := e.semiring; [inst : Algebra R β] → Algebra R α

Transfer Algebra across an Equiv

Equations
theorem Equiv.algebraMap_def {α : Type u} {β : Type v} (R : Type u_1) [CommSemiring R] (e : α β) [Semiring β] [Algebra R β] (r : R) :
(algebraMap R α) r = e.symm ((algebraMap R β) r)
noncomputable instance Equiv.instAlgebraShrink {α : Type u} (R : Type u_1) [CommSemiring R] [Small.{v, u} α] [Semiring α] [Algebra R α] :
Equations
def Equiv.algEquiv {α : Type u} {β : Type v} (R : Type u_1) [CommSemiring R] (e : α β) [Semiring β] [Algebra R β] :
let semiring := e.semiring; let algebra := Equiv.algebra R e; α ≃ₐ[R] β

An equivalence e : α ≃ β gives an algebra equivalence α ≃ₐ[R] β where the R-algebra structure on α is the one obtained by transporting an R-algebra structure on β back along e.

Equations
@[simp]
theorem Equiv.algEquiv_apply {α : Type u} {β : Type v} (R : Type u_1) [CommSemiring R] (e : α β) [Semiring β] [Algebra R β] (a : α) :
(algEquiv R e) a = e a
theorem Equiv.algEquiv_symm_apply {α : Type u} {β : Type v} (R : Type u_1) [CommSemiring R] (e : α β) [Semiring β] [Algebra R β] (b : β) :
noncomputable def Shrink.algEquiv (α : Type u) (R : Type u_1) [CommSemiring R] [Small.{v, u} α] [Semiring α] [Algebra R α] :

Shrink α to a smaller universe preserves algebra structure.

Equations
@[simp]
theorem Shrink.algEquiv_symm_apply (α : Type u) (R : Type u_1) [CommSemiring R] [Small.{v, u} α] [Semiring α] [Algebra R α] (a✝ : α) :
(algEquiv α R).symm a✝ = (equivShrink α) a✝
@[simp]
theorem Shrink.algEquiv_apply (α : Type u) (R : Type u_1) [CommSemiring R] [Small.{v, u} α] [Semiring α] [Algebra R α] (a✝ : Shrink.{v, u} α) :
(algEquiv α R) a✝ = (equivShrink α).symm a✝
theorem Finite.exists_type_univ_nonempty_mulEquiv (G : Type u) [Group G] [Finite G] :
∃ (G' : Type v) (x : Group G') (x_1 : Fintype G'), Nonempty (G ≃* G')

Any finite group in universe u is equivalent to some finite group in universe v.

@[reducible, inline]
abbrev AddEquiv.module {α : Type u} {β : Type v} (A : Type u_2) [Semiring A] [AddCommMonoid α] [AddCommMonoid β] [Module A β] (e : α ≃+ β) :
Module A α

Transport a module instance via an isomorphism of the underlying abelian groups. This has better definitional properties than Equiv.module since here the abelian group structure remains unmodified.

Equations
theorem LinearEquiv.isScalarTower {α : Type u} {β : Type v} {R : Type u_1} [CommSemiring R] (A : Type u_2) [Semiring A] [Algebra R A] [AddCommMonoid α] [AddCommMonoid β] [Module A β] [Module R α] [Module R β] [IsScalarTower R A β] (e : α ≃ₗ[R] β) :

The module instance from AddEquiv.module is compatible with the R-module structures, if the AddEquiv is induced by an R-module isomorphism.