(Semi)ring equivs #
In this file we define an extension of Equiv
called RingEquiv
, which is a datatype representing
an isomorphism of Semiring
s, Ring
s, DivisionRing
s, or Field
s.
Notations #
infixl ` ≃+* `:25 := RingEquiv
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 RingEquiv
now avoid the unbundled isMulHom
and isAddHom
, as these are
deprecated.
Definition of multiplication in the groups of automorphisms agrees with function composition,
multiplication in Equiv.Perm
, and multiplication in CategoryTheory.End
, not with
CategoryTheory.CategoryStruct.comp
.
Tags #
Equiv, MulEquiv, AddEquiv, RingEquiv, MulAut, AddAut, RingAut
makes a NonUnitalRingHom
from the bijective inverse of a NonUnitalRingHom
Equations
- f.inverse g h₁ h₂ = { toFun := g, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
makes a RingHom
from the bijective inverse of a RingHom
Equations
- f.inverse g h₁ h₂ = { toFun := g, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
An equivalence between two (non-unital non-associative semi)rings that preserves the algebraic structure.
- toFun : R → S
- invFun : S → R
- left_inv : Function.LeftInverse self.invFun self.toFun
- right_inv : Function.RightInverse self.invFun self.toFun
Instances For
Notation for RingEquiv
.
Equations
- «term_≃+*_» = Lean.ParserDescr.trailingNode `«term_≃+*_» 25 25 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ≃+* ") (Lean.ParserDescr.cat `term 26))
Instances For
RingEquivClass F R S
states that F
is a type of ring structure preserving equivalences.
You should extend this class when you extend RingEquiv
.
By definition, a ring isomorphism preserves the additive structure.
Instances
Turn an element of a type F
satisfying RingEquivClass F α β
into an actual
RingEquiv
. This is declared as the default coercion from F
to α ≃+* β
.
Equations
- ↑f = { toEquiv := (↑f).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Any type satisfying RingEquivClass
can be cast into RingEquiv
via
RingEquivClass.toRingEquiv
.
Equations
- instCoeTCRingEquivOfRingEquivClass = { coe := RingEquivClass.toRingEquiv }
The identity map is a ring isomorphism.
Equations
- RingEquiv.refl R = { toEquiv := (MulEquiv.refl R).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Equations
- RingEquiv.instInhabited R = { default := RingEquiv.refl R }
Auxiliary definition to avoid looping in dsimp
with RingEquiv.symm_mk
.
Equations
- RingEquiv.symm_mk.aux f g h₁ h₂ h₃ h₄ = { toFun := f, invFun := g, left_inv := h₁, right_inv := h₂, map_mul' := h₃, map_add' := h₄ }.symm
Instances For
Transitivity of RingEquiv
.
Equations
- e₁.trans e₂ = { toEquiv := (e₁.toMulEquiv.trans e₂.toMulEquiv).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The RingEquiv
between two semirings with a unique element.
Equations
- RingEquiv.ringEquivOfUnique = { toEquiv := AddEquiv.addEquivOfUnique.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
A ring is isomorphic to the opposite of its opposite.
Equations
- RingEquiv.opOp R = { toEquiv := (MulEquiv.opOp R).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
A non-unital commutative ring is isomorphic to its opposite.
Equations
- RingEquiv.toOpposite R = { toEquiv := MulOpposite.opEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
A ring isomorphism sends zero to zero.
Produce a ring isomorphism from a bijective ring homomorphism.
Equations
- RingEquiv.ofBijective f hf = { toEquiv := Equiv.ofBijective (⇑f) hf, map_mul' := ⋯, map_add' := ⋯ }
Instances For
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 RingEquiv
version of Equiv.piCongrRight
, and the dependent version of
RingEquiv.arrowCongr
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Transport dependent functions through an equivalence of the base space.
This is Equiv.piCongrLeft'
as a RingEquiv
.
Equations
- RingEquiv.piCongrLeft' R e = { toEquiv := Equiv.piCongrLeft' R e, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Transport dependent functions through an equivalence of the base space.
This is Equiv.piCongrLeft
as a RingEquiv
.
Equations
- RingEquiv.piCongrLeft S e = (RingEquiv.piCongrLeft' S e.symm).symm
Instances For
Splits the indices of ring ∀ (i : ι), Y i
along the predicate p
. This is
Equiv.piEquivPiSubtypeProd
as a RingEquiv
.
Equations
- RingEquiv.piEquivPiSubtypeProd p Y = { toEquiv := Equiv.piEquivPiSubtypeProd p Y, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Product of ring equivalences. This is Equiv.prodCongr
as a RingEquiv
.
Equations
- f.prodCongr g = { toEquiv := (↑f).prodCongr ↑g, map_mul' := ⋯, map_add' := ⋯ }
Instances For
A ring isomorphism sends one to one.
RingEquiv.coe_mulEquiv_refl
and RingEquiv.coe_addEquiv_refl
are proved above
in higher generality
RingEquiv.coe_mulEquiv_trans
and RingEquiv.coe_addEquiv_trans
are proved above
in higher generality
Reinterpret a ring equivalence as a non-unital ring homomorphism.
Equations
- e.toNonUnitalRingHom = { toMulHom := e.toMulEquiv.toMulHom, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Reinterpret a ring equivalence as a ring homomorphism.
Equations
- e.toRingHom = { toMonoidHom := e.toMulEquiv.toMonoidHom, map_zero' := ⋯, map_add' := ⋯ }
Instances For
The two paths coercion can take to a NonUnitalRingEquiv
are equivalent
Reinterpret a ring equivalence as a monoid homomorphism.
Equations
- e.toMonoidHom = ↑e.toRingHom
Instances For
Reinterpret a ring equivalence as an AddMonoid
homomorphism.
Equations
- e.toAddMonoidHom = e.toRingHom.toAddMonoidHom
Instances For
The two paths coercion can take to an AddMonoidHom
are equivalent
The two paths coercion can take to a MonoidHom
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.
Equations
- RingEquiv.ofHomInv' hom inv hom_inv_id inv_hom_id = { toFun := ⇑hom, invFun := ⇑inv, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Construct an equivalence of rings from unital homomorphisms in both directions, which are inverses.
Equations
- RingEquiv.ofHomInv hom inv hom_inv_id inv_hom_id = { toFun := ⇑hom, invFun := ⇑inv, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Gives a RingEquiv
from an element of a MulEquivClass
preserving addition.
Equations
- MulEquiv.toRingEquiv f H = { toEquiv := (↑f).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Gives a RingEquiv
from an element of an AddEquivClass
preserving addition.
Equations
- AddEquiv.toRingEquiv f H = { toEquiv := (↑f).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
If a ring homomorphism has an inverse, it is a ring isomorphism.
Equations
- RingEquiv.ofRingHom f g h₁ h₂ = { toFun := ⇑f, invFun := ⇑g, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
If two rings are isomorphic, and the second doesn't have zero divisors, then so does the first.