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 semigroup_with_zero
across an equiv
Equations
- e.semigroup_with_zero = let mul : has_mul α := e.has_mul, zero : has_zero α := e.has_zero in function.injective.semigroup_with_zero ⇑e _ _ _
Transfer comm_semigroup
across an equiv
Equations
- e.comm_semigroup = let mul : has_mul α := e.has_mul in function.injective.comm_semigroup ⇑e _ _
Transfer add_comm_semigroup
across an equiv
Transfer mul_zero_class
across an equiv
Equations
- e.mul_zero_class = let zero : has_zero α := e.has_zero, mul : has_mul α := e.has_mul in function.injective.mul_zero_class ⇑e _ _ _
Transfer mul_one_class
across an equiv
Equations
- e.mul_one_class = let one : has_one α := e.has_one, mul : has_mul α := e.has_mul in function.injective.mul_one_class ⇑e _ _ _
Transfer add_zero_class
across an equiv
Transfer mul_zero_one_class
across an equiv
Equations
- e.mul_zero_one_class = let zero : has_zero α := e.has_zero, one : has_one α := e.has_one, mul : has_mul α := e.has_mul in function.injective.mul_zero_one_class ⇑e _ _ _ _
Transfer add_monoid
across an equiv
Transfer comm_monoid
across an equiv
Equations
- e.comm_monoid = let one : has_one α := e.has_one, mul : has_mul α := e.has_mul in function.injective.comm_monoid ⇑e _ _ _
Transfer add_comm_monoid
across an equiv
Transfer add_comm_group
across an equiv
Transfer comm_group
across an equiv
Transfer comm_semiring
across an equiv
Transfer nonzero
across an equiv
Transfer integral_domain
across an equiv
Transfer division_ring
across an equiv
Equations
- e.division_ring = let zero : has_zero α := e.has_zero, add : has_add α := e.has_add, one : has_one α := e.has_one, mul : has_mul α := e.has_mul, neg : has_neg α := e.has_neg, sub : has_sub α := e.has_sub, inv : has_inv α := e.has_inv, div : has_div α := e.has_div in function.injective.division_ring ⇑e _ _ _ _ _ _ _ _ _
Transfer field
across an equiv
Equations
- e.field = let zero : has_zero α := e.has_zero, add : has_add α := e.has_add, one : has_one α := e.has_one, mul : has_mul α := e.has_mul, neg : has_neg α := e.has_neg, sub : has_sub α := e.has_sub, inv : has_inv α := e.has_inv, div : has_div α := e.has_div in function.injective.field ⇑e _ _ _ _ _ _ _ _ _
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 module
across an equiv
Equations
- equiv.module R e = let _inst : add_comm_monoid α := e.add_comm_monoid in λ (_inst_3 : module 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 : module R α := equiv.module 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' := _}