Transfer algebraic structures across Equiv
s #
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
Equations
- Equiv.instZeroShrink = (equivShrink α).symm.zero
Equations
- Equiv.instOneShrink = (equivShrink α).symm.one
Equations
- Equiv.instAddShrink = (equivShrink α).symm.add
Equations
- Equiv.instMulShrink = (equivShrink α).symm.mul
Equations
- Equiv.instSubShrink = (equivShrink α).symm.sub
Equations
- Equiv.instDivShrink = (equivShrink α).symm.div
Equations
- Equiv.instNegShrink = (equivShrink α).symm.Neg
Equations
- Equiv.instInvShrink = (equivShrink α).symm.Inv
Equations
- Equiv.instSMulShrink R = (equivShrink α).symm.smul R
Equations
- Equiv.instPowShrink N = (equivShrink α).symm.pow N
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 = let mul := e.add; { toEquiv := e, map_add' := ⋯ }
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
.
Equations
- e.mulEquiv = let mul := e.mul; { toEquiv := e, map_mul' := ⋯ }
Instances For
Shrink α
to a smaller universe preserves addition.
Equations
- Shrink.addEquiv = (equivShrink α).symm.addEquiv
Instances For
Shrink α
to a smaller universe preserves multiplication.
Equations
- Shrink.mulEquiv = (equivShrink α).symm.mulEquiv
Instances For
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 = let add := e.add; let mul := e.mul; { toEquiv := e, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Shrink α
to a smaller universe preserves ring structure.
Equations
- Shrink.ringEquiv α = (equivShrink α).symm.ringEquiv
Instances For
Transfer add_semigroup
across an Equiv
Equations
- e.addSemigroup = let mul := e.add; Function.Injective.addSemigroup ⇑e ⋯ ⋯
Instances For
Equations
- Equiv.instAddSemigroupShrink = (equivShrink α).symm.addSemigroup
Equations
- Equiv.instSemigroupShrink = (equivShrink α).symm.semigroup
Transfer SemigroupWithZero
across an Equiv
Equations
- e.semigroupWithZero = let mul := e.mul; let zero := e.zero; Function.Injective.semigroupWithZero ⇑e ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instAddSemigroupWithZeroShrink = (equivShrink α).symm.semigroupWithZero
Equations
- Equiv.instSemigroupWithZeroShrink = (equivShrink α).symm.semigroupWithZero
Transfer AddCommSemigroup
across an Equiv
Equations
- e.addCommSemigroup = let mul := e.add; Function.Injective.addCommSemigroup ⇑e ⋯ ⋯
Instances For
Transfer CommSemigroup
across an Equiv
Equations
- e.commSemigroup = let mul := e.mul; Function.Injective.commSemigroup ⇑e ⋯ ⋯
Instances For
Equations
- Equiv.instAddCommSemigroupShrink = (equivShrink α).symm.addCommSemigroup
Equations
- Equiv.instCommSemigroupShrink = (equivShrink α).symm.commSemigroup
Transfer MulZeroClass
across an Equiv
Equations
- e.mulZeroClass = let zero := e.zero; let mul := e.mul; Function.Injective.mulZeroClass ⇑e ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instMulZeroClassShrink = (equivShrink α).symm.mulZeroClass
Transfer AddZeroClass
across an Equiv
Equations
- e.addZeroClass = let one := e.zero; let mul := e.add; Function.Injective.addZeroClass ⇑e ⋯ ⋯ ⋯
Instances For
Transfer MulOneClass
across an Equiv
Equations
- e.mulOneClass = let one := e.one; let mul := e.mul; Function.Injective.mulOneClass ⇑e ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instAddZeroClassShrink = (equivShrink α).symm.addZeroClass
Equations
- Equiv.instMulOneClassShrink = (equivShrink α).symm.mulOneClass
Transfer MulZeroOneClass
across an Equiv
Equations
- e.mulZeroOneClass = let zero := e.zero; let one := e.one; let mul := e.mul; Function.Injective.mulZeroOneClass ⇑e ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instMulZeroOneClassShrink = (equivShrink α).symm.mulZeroOneClass
Equations
- Equiv.instAddMonoidShrink = (equivShrink α).symm.addMonoid
Equations
- Equiv.instMonoidShrink = (equivShrink α).symm.monoid
Transfer AddCommMonoid
across an Equiv
Equations
- e.addCommMonoid = let one := e.zero; let mul := e.add; let pow := e.smul ℕ; Function.Injective.addCommMonoid ⇑e ⋯ ⋯ ⋯ ⋯
Instances For
Transfer CommMonoid
across an Equiv
Equations
- e.commMonoid = let one := e.one; let mul := e.mul; let pow := e.pow ℕ; Function.Injective.commMonoid ⇑e ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instAddCommMonoidShrink = (equivShrink α).symm.addCommMonoid
Equations
- Equiv.instCommMonoidShrink = (equivShrink α).symm.commMonoid
Equations
- Equiv.instAddGroupShrink = (equivShrink α).symm.addGroup
Equations
- Equiv.instGroupShrink = (equivShrink α).symm.group
Transfer AddCommGroup
across an Equiv
Equations
- e.addCommGroup = let one := e.zero; let mul := e.add; let inv := e.Neg; let div := e.sub; let npow := e.smul ℕ; let zpow := e.smul ℤ; Function.Injective.addCommGroup ⇑e ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instAddCommGroupShrink = (equivShrink α).symm.addCommGroup
Equations
- Equiv.instCommGroupShrink = (equivShrink α).symm.commGroup
Transfer NonUnitalNonAssocSemiring
across an Equiv
Equations
- e.nonUnitalNonAssocSemiring = let zero := e.zero; let add := e.add; let mul := e.mul; let nsmul := e.smul ℕ; Function.Injective.nonUnitalNonAssocSemiring ⇑e ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instNonUnitalNonAssocSemiringShrink = (equivShrink α).symm.nonUnitalNonAssocSemiring
Transfer NonUnitalSemiring
across an Equiv
Equations
- e.nonUnitalSemiring = let zero := e.zero; let add := e.add; let mul := e.mul; let nsmul := e.smul ℕ; Function.Injective.nonUnitalSemiring ⇑e ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instNonUnitalSemiringShrink = (equivShrink α).symm.nonUnitalSemiring
Transfer AddMonoidWithOne
across an Equiv
Equations
- e.addMonoidWithOne = let __src := e.addMonoid; let __src_1 := e.one; AddMonoidWithOne.mk ⋯ ⋯
Instances For
Equations
- Equiv.instAddMonoidWithOneShrink = (equivShrink α).symm.addMonoidWithOne
Transfer AddGroupWithOne
across an Equiv
Equations
- e.addGroupWithOne = let __src := e.addMonoidWithOne; let __src_1 := e.addGroup; AddGroupWithOne.mk ⋯ SubNegMonoid.zsmul ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instAddGroupWithOneShrink = (equivShrink α).symm.addGroupWithOne
Transfer NonAssocSemiring
across an Equiv
Equations
- e.nonAssocSemiring = let mul := e.mul; let add_monoid_with_one := e.addMonoidWithOne; Function.Injective.nonAssocSemiring ⇑e ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instNonAssocSemiringShrink = (equivShrink α).symm.nonAssocSemiring
Transfer Semiring
across an Equiv
Equations
- e.semiring = let mul := e.mul; let add_monoid_with_one := e.addMonoidWithOne; let npow := e.pow ℕ; Function.Injective.semiring ⇑e ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instSemiringShrink = (equivShrink α).symm.semiring
Transfer NonUnitalCommSemiring
across an Equiv
Equations
- e.nonUnitalCommSemiring = let zero := e.zero; let add := e.add; let mul := e.mul; let nsmul := e.smul ℕ; Function.Injective.nonUnitalCommSemiring ⇑e ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instNonUnitalCommSemiringShrink = (equivShrink α).symm.nonUnitalCommSemiring
Transfer CommSemiring
across an Equiv
Equations
- e.commSemiring = let mul := e.mul; let add_monoid_with_one := e.addMonoidWithOne; let npow := e.pow ℕ; Function.Injective.commSemiring ⇑e ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instCommSemiringShrink = (equivShrink α).symm.commSemiring
Transfer NonUnitalNonAssocRing
across an Equiv
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Equiv.instNonUnitalNonAssocRingShrink = (equivShrink α).symm.nonUnitalNonAssocRing
Transfer NonUnitalRing
across an Equiv
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Equiv.instNonUnitalRingShrink = (equivShrink α).symm.nonUnitalRing
Transfer NonAssocRing
across an Equiv
Equations
- e.nonAssocRing = let add_group_with_one := e.addGroupWithOne; let mul := e.mul; Function.Injective.nonAssocRing ⇑e ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instNonAssocRingShrink = (equivShrink α).symm.nonAssocRing
Equations
- Equiv.instRingShrink = (equivShrink α).symm.ring
Transfer NonUnitalCommRing
across an Equiv
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Equiv.instNonUnitalCommRingShrink = (equivShrink α).symm.nonUnitalCommRing
Transfer CommRing
across an Equiv
Equations
- e.commRing = let mul := e.mul; let add_group_with_one := e.addGroupWithOne; let npow := e.pow ℕ; Function.Injective.commRing ⇑e ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
Instances For
Equations
- Equiv.instCommRingShrink = (equivShrink α).symm.commRing
Transfer Nontrivial
across an Equiv
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- Shrink.instNNRatCast = (equivShrink α).symm.nnratCast
Equations
- Shrink.instRatCast = (equivShrink α).symm.ratCast
Transfer DivisionRing
across an Equiv
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Equiv.instDivisionRingShrink = (equivShrink α).symm.divisionRing
Equations
- Equiv.instFieldShrink = (equivShrink α).symm.field
Transfer MulAction
across an Equiv
Equations
- Equiv.mulAction R e = let __src := e.smul R; MulAction.mk ⋯ ⋯
Instances For
Equations
- Equiv.instMulActionShrink R = Equiv.mulAction R (equivShrink α).symm
Transfer DistribMulAction
across an Equiv
Equations
- Equiv.distribMulAction R e = let __src := Equiv.mulAction R e; DistribMulAction.mk ⋯ ⋯
Instances For
Equations
Transfer Module
across an Equiv
Equations
- @Equiv.module α β R inst✝ e inst = let addCommMonoid := e.addCommMonoid; fun [Module R β] => let __src := Equiv.distribMulAction R e; Module.mk ⋯ ⋯
Instances For
Equations
- Equiv.instModuleShrink R = Equiv.module R (equivShrink α).symm
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
- One or more equations did not get rendered due to their size.
Instances For
Shrink α
to a smaller universe preserves module structure.
Equations
- Shrink.linearEquiv α R = Equiv.linearEquiv R (equivShrink α).symm
Instances For
Transfer Algebra
across an Equiv
Equations
- @Equiv.algebra α β R inst✝ e inst = let semiring := e.semiring; fun [Algebra R β] => Algebra.ofModule ⋯ ⋯
Instances For
Equations
- Equiv.instAlgebraShrink R = Equiv.algebra R (equivShrink α).symm
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
- Equiv.algEquiv R e = let semiring := e.semiring; let algebra := Equiv.algebra R e; let __src := e.ringEquiv; { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
Instances For
Shrink α
to a smaller universe preserves algebra structure.
Equations
- Shrink.algEquiv α R = Equiv.algEquiv R (equivShrink α).symm