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.
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' := _}