(Semi)ring equivs #
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 (semi)rings that preserves the algebraic structure.
- 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
.
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.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
Equations
- ring_equiv.unique = {to_inhabited := {default := ring_equiv.ring_equiv_of_unique_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 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.
A ring isomorphism sends one to one.
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
.
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}
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.
An isomorphism into the opposite ring acts on the product by acting on the reversed elements