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.
Tags
equiv, group, ring, field, module, algebra
Transfer has_scalar
across an equiv
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
.
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
.
Transfer add_semigroup
across an equiv
Transfer comm_semigroup
across an equiv
Equations
- e.comm_semigroup = {mul := semigroup.mul e.semigroup, mul_assoc := _, mul_comm := _}
Transfer add_comm_semigroup
across an equiv
Transfer add_monoid
across an equiv
Transfer add_comm_monoid
across an equiv
Transfer comm_monoid
across an equiv
Equations
- e.comm_monoid = {mul := comm_semigroup.mul e.comm_semigroup, mul_assoc := _, one := monoid.one e.monoid, one_mul := _, mul_one := _, mul_comm := _}
Transfer group
across an equiv
Equations
- e.group = {mul := monoid.mul e.monoid, mul_assoc := _, one := monoid.one e.monoid, one_mul := _, mul_one := _, inv := has_inv.inv e.has_inv, mul_left_inv := _}
Transfer comm_group
across an equiv
Transfer add_comm_group
across an equiv
Transfer semiring
across an equiv
Equations
- e.semiring = {add := has_add.add e.has_add, add_assoc := _, zero := 0, zero_add := _, add_zero := _, add_comm := _, mul := has_mul.mul e.has_mul, mul_assoc := _, one := monoid.one e.monoid, one_mul := _, mul_one := _, zero_mul := _, mul_zero := _, left_distrib := _, right_distrib := _}
Transfer comm_semiring
across an equiv
Equations
- e.comm_semiring = {add := semiring.add e.semiring, add_assoc := _, zero := semiring.zero e.semiring, zero_add := _, add_zero := _, add_comm := _, mul := semiring.mul e.semiring, mul_assoc := _, one := semiring.one e.semiring, one_mul := _, mul_one := _, zero_mul := _, mul_zero := _, left_distrib := _, right_distrib := _, mul_comm := _}
Equations
- e.ring = {add := semiring.add e.semiring, add_assoc := _, zero := semiring.zero e.semiring, zero_add := _, add_zero := _, neg := add_comm_group.neg e.add_comm_group, add_left_neg := _, add_comm := _, mul := semiring.mul e.semiring, mul_assoc := _, one := semiring.one e.semiring, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _}
Transfer comm_ring
across an equiv
Equations
- e.comm_ring = {add := ring.add e.ring, add_assoc := _, zero := ring.zero e.ring, zero_add := _, add_zero := _, neg := ring.neg e.ring, add_left_neg := _, add_comm := _, mul := comm_monoid.mul e.comm_monoid, mul_assoc := _, one := comm_monoid.one e.comm_monoid, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _, mul_comm := _}
Transfer nonzero
across an equiv
Transfer domain
across an equiv
Equations
- e.domain = {add := ring.add e.ring, add_assoc := _, zero := ring.zero e.ring, zero_add := _, add_zero := _, neg := ring.neg e.ring, add_left_neg := _, add_comm := _, mul := ring.mul e.ring, mul_assoc := _, one := ring.one e.ring, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _, exists_pair_ne := _, eq_zero_or_eq_zero_of_mul_eq_zero := _}
Transfer integral_domain
across an equiv
Equations
- e.integral_domain = {add := domain.add e.domain, add_assoc := _, zero := domain.zero e.domain, zero_add := _, add_zero := _, neg := domain.neg e.domain, add_left_neg := _, add_comm := _, mul := domain.mul e.domain, mul_assoc := _, one := domain.one e.domain, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _, mul_comm := _, exists_pair_ne := _, eq_zero_or_eq_zero_of_mul_eq_zero := _}
Transfer division_ring
across an equiv
Equations
- e.division_ring = {add := domain.add e.domain, add_assoc := _, zero := 0, zero_add := _, add_zero := _, neg := domain.neg e.domain, add_left_neg := _, add_comm := _, mul := domain.mul e.domain, mul_assoc := _, one := 1, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _, inv := has_inv.inv e.has_inv, exists_pair_ne := _, mul_inv_cancel := _, inv_mul_cancel := _, inv_zero := _}
Transfer field
across an equiv
Equations
- e.field = {add := integral_domain.add e.integral_domain, add_assoc := _, zero := integral_domain.zero e.integral_domain, zero_add := _, add_zero := _, neg := integral_domain.neg e.integral_domain, add_left_neg := _, add_comm := _, mul := integral_domain.mul e.integral_domain, mul_assoc := _, one := integral_domain.one e.integral_domain, one_mul := _, mul_one := _, left_distrib := _, right_distrib := _, mul_comm := _, inv := division_ring.inv e.division_ring, exists_pair_ne := _, mul_inv_cancel := _, inv_zero := _}
Transfer mul_action
across an equiv
Equations
- equiv.mul_action R e = {to_has_scalar := {smul := has_scalar.smul e.has_scalar}, one_smul := _, mul_smul := _}
Transfer distrib_mul_action
across an equiv
Equations
- equiv.distrib_mul_action R e = let _inst : add_comm_monoid α := e.add_comm_monoid in λ (_inst_3 : distrib_mul_action R β), let _inst_4 : add_comm_monoid α := e.add_comm_monoid in {to_mul_action := {to_has_scalar := mul_action.to_has_scalar (equiv.mul_action R e), one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}
Transfer semimodule
across an equiv
Equations
- equiv.semimodule R e = let _inst : add_comm_monoid α := e.add_comm_monoid in λ (_inst_3 : semimodule R β), {to_distrib_mul_action := {to_mul_action := distrib_mul_action.to_mul_action (equiv.distrib_mul_action R e), smul_add := _, smul_zero := _}, add_smul := _, zero_smul := _}
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
- equiv.linear_equiv R e = let _inst : add_comm_monoid α := e.add_comm_monoid, _inst_4 : semimodule R α := equiv.semimodule R e in {to_fun := e.add_equiv.to_fun, map_add' := _, map_smul' := _, inv_fun := e.add_equiv.inv_fun, left_inv := _, right_inv := _}
Transfer algebra
across an equiv
Equations
- equiv.algebra R e = let _inst : semiring α := e.semiring in λ (_inst_3 : algebra R β), (↑(ring_equiv.symm e.ring_equiv).comp (algebra_map R β)).to_algebra' _
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.alg_equiv R e = let _inst : semiring α := e.semiring, _inst_4 : algebra R α := equiv.algebra R e in {to_fun := e.ring_equiv.to_fun, inv_fun := e.ring_equiv.inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _, commutes' := _}