(Semi)ring equivs #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file we define extension of equiv
called ring_equiv
, which is a datatype representing an
isomorphism of semiring
s, ring
s, division_ring
s, or field
s. We also introduce the
corresponding group of automorphisms ring_aut
.
Notations #
infix ` ≃+* `:25 := ring_equiv
The extended equiv have coercions to functions, and the coercion is the canonical notation when treating the isomorphism as maps.
Implementation notes #
The fields for ring_equiv
now avoid the unbundled is_mul_hom
and is_add_hom
, as these are
deprecated.
Definition of multiplication in the groups of automorphisms agrees with function composition,
multiplication in equiv.perm
, and multiplication in category_theory.End
, not with
category_theory.comp
.
Tags #
equiv, mul_equiv, add_equiv, ring_equiv, mul_aut, add_aut, ring_aut
- to_fun : R → S
- inv_fun : S → R
- left_inv : function.left_inverse self.inv_fun self.to_fun
- right_inv : function.right_inverse self.inv_fun self.to_fun
- map_mul' : ∀ (x y : R), self.to_fun (x * y) = self.to_fun x * self.to_fun y
- map_add' : ∀ (x y : R), self.to_fun (x + y) = self.to_fun x + self.to_fun y
An equivalence between two (non-unital non-associative semi)rings that preserves the algebraic structure.
Instances for ring_equiv
- ring_equiv.has_coe_to_non_unital_ring_hom
- ring_equiv.has_sizeof_inst
- ring_equiv.has_coe_t
- ring_equiv.ring_equiv_class
- ring_equiv.has_coe_to_fun
- ring_equiv.unique
- ring_equiv.inhabited
- ring_equiv.has_coe_to_ring_hom
- ring_aut.group
- ring_aut.inhabited
- ring_aut.apply_mul_semiring_action
- ring_aut.apply_has_faithful_smul
- alg_equiv.has_coe_to_ring_equiv
- zmod.subsingleton_ring_equiv
- ring_invo.has_coe_to_ring_equiv
- coe : F → R → S
- inv : F → S → R
- left_inv : ∀ (e : F), function.left_inverse (ring_equiv_class.inv e) (ring_equiv_class.coe e)
- right_inv : ∀ (e : F), function.right_inverse (ring_equiv_class.inv e) (ring_equiv_class.coe e)
- coe_injective' : ∀ (e g : F), ring_equiv_class.coe e = ring_equiv_class.coe g → ring_equiv_class.inv e = ring_equiv_class.inv g → e = g
- map_mul : ∀ (f : F) (a b : R), ⇑f (a * b) = ⇑f a * ⇑f b
- map_add : ∀ (f : F) (a b : R), ⇑f (a + b) = ⇑f a + ⇑f b
ring_equiv_class F R S
states that F
is a type of ring structure preserving equivalences.
You should extend this class when you extend ring_equiv
.
Instances of this typeclass
Instances of other typeclasses for ring_equiv_class
- ring_equiv_class.has_sizeof_inst
Equations
- ring_equiv_class.to_add_equiv_class F R S = {coe := coe_fn fun_like.has_coe_to_fun, inv := ring_equiv_class.inv h, left_inv := _, right_inv := _, coe_injective' := _, map_add := _}
Equations
- ring_equiv_class.to_ring_hom_class F R S = {coe := coe_fn fun_like.has_coe_to_fun, coe_injective' := _, map_mul := _, map_one := _, map_add := _, map_zero := _}
Equations
- ring_equiv_class.to_non_unital_ring_hom_class F R S = {coe := coe_fn fun_like.has_coe_to_fun, coe_injective' := _, map_mul := _, map_add := _, map_zero := _}
Equations
- ring_equiv.ring_equiv_class = {coe := ring_equiv.to_fun _inst_4, inv := ring_equiv.inv_fun _inst_4, left_inv := _, right_inv := _, coe_injective' := _, map_mul := _, map_add := _}
Equations
- ring_equiv.has_coe_to_fun = {coe := ring_equiv.to_fun _inst_4}
The ring_equiv
between two semirings with a unique element.
Equations
- ring_equiv.ring_equiv_of_unique = {to_fun := add_equiv.add_equiv_of_unique.to_fun, inv_fun := add_equiv.add_equiv_of_unique.inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _}
Equations
- ring_equiv.unique = {to_inhabited := {default := ring_equiv.ring_equiv_of_unique _inst_12}, uniq := _}
The identity map is a ring isomorphism.
Equations
- ring_equiv.refl R = {to_fun := (mul_equiv.refl R).to_fun, inv_fun := (mul_equiv.refl R).inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _}
Equations
- ring_equiv.inhabited R = {default := ring_equiv.refl R _inst_2}
See Note [custom simps projection]
Equations
Transitivity of ring_equiv
.
Equations
- e₁.trans e₂ = {to_fun := (e₁.to_mul_equiv.trans e₂.to_mul_equiv).to_fun, inv_fun := (e₁.to_mul_equiv.trans e₂.to_mul_equiv).inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _}
A ring iso α ≃+* β
can equivalently be viewed as a ring iso αᵐᵒᵖ ≃+* βᵐᵒᵖ
.
Equations
- ring_equiv.op = {to_fun := λ (f : α ≃+* β), {to_fun := (⇑add_equiv.mul_op f.to_add_equiv).to_fun, inv_fun := (⇑add_equiv.mul_op f.to_add_equiv).inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _}, inv_fun := λ (f : αᵐᵒᵖ ≃+* βᵐᵒᵖ), {to_fun := (⇑(add_equiv.mul_op.symm) f.to_add_equiv).to_fun, inv_fun := (⇑(add_equiv.mul_op.symm) f.to_add_equiv).inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _}, left_inv := _, right_inv := _}
The 'unopposite' of a ring iso αᵐᵒᵖ ≃+* βᵐᵒᵖ
. Inverse to ring_equiv.op
.
Equations
A non-unital commutative ring is isomorphic to its opposite.
Equations
- ring_equiv.to_opposite R = {to_fun := mul_opposite.op_equiv.to_fun, inv_fun := mul_opposite.op_equiv.inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _}
A ring isomorphism sends zero to zero.
Produce a ring isomorphism from a bijective ring homomorphism.
Equations
- ring_equiv.of_bijective f hf = {to_fun := (equiv.of_bijective ⇑f hf).to_fun, inv_fun := (equiv.of_bijective ⇑f hf).inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _}
A family of ring isomorphisms Π j, (R j ≃+* S j)
generates a
ring isomorphisms between Π j, R j
and Π j, S j
.
This is the ring_equiv
version of equiv.Pi_congr_right
, and the dependent version of
ring_equiv.arrow_congr
.
A ring isomorphism sends one to one.
ring_equiv.coe_mul_equiv_refl
and ring_equiv.coe_add_equiv_refl
are proved above
in higher generality
ring_equiv.coe_mul_equiv_trans
and ring_equiv.coe_add_equiv_trans
are proved above
in higher generality
Reinterpret a ring equivalence as a non-unital ring homomorphism.
Equations
- e.to_non_unital_ring_hom = {to_fun := e.to_mul_equiv.to_mul_hom.to_fun, map_mul' := _, map_zero' := _, map_add' := _}
Equations
Reinterpret a ring equivalence as a ring homomorphism.
Equations
- e.to_ring_hom = {to_fun := e.to_mul_equiv.to_monoid_hom.to_fun, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _}
Equations
- ring_equiv.has_coe_to_ring_hom = {coe := ring_equiv.to_ring_hom _inst_2}
The two paths coercion can take to a non_unital_ring_hom
are equivalent
Reinterpret a ring equivalence as a monoid homomorphism.
Reinterpret a ring equivalence as an add_monoid
homomorphism.
The two paths coercion can take to an add_monoid_hom
are equivalent
The two paths coercion can take to an monoid_hom
are equivalent
The two paths coercion can take to an equiv
are equivalent
Construct an equivalence of rings from homomorphisms in both directions, which are inverses.
Construct an equivalence of rings from unital homomorphisms in both directions, which are inverses.
Gives a ring_equiv
from an element of a mul_equiv_class
preserving addition.
Gives a ring_equiv
from an element of an add_equiv_class
preserving addition.
If two rings are isomorphic, and the second doesn't have zero divisors, then so does the first.