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