(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
- One or more equations did not get rendered due to their size.
Instances For
makes a RingHom
from the bijective inverse of a RingHom
Equations
- One or more equations did not get rendered due to their size.
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
The proposition that the function preserves multiplication
The proposition that the function preserves addition
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
The equivalence of multiplicative monoids underlying an equivalence of (semi)rings.
Equations
- RingEquiv.toMulEquiv self = { toEquiv := self.toEquiv, map_mul' := ⋯ }
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
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
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 = let __src := ↑f; let __src_1 := ↑f; { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Any type satisfying RingEquivClass
can be cast into RingEquiv
via
RingEquivClass.toRingEquiv
.
Equations
- instCoeTCRingEquiv = { coe := RingEquivClass.toRingEquiv }
The RingEquiv
between two semirings with a unique element.
Equations
- RingEquiv.ringEquivOfUnique = let __src := AddEquiv.addEquivOfUnique; let __src_1 := MulEquiv.mulEquivOfUnique; { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
The identity map is a ring isomorphism.
Equations
- RingEquiv.refl R = let __src := MulEquiv.refl R; let __src_1 := AddEquiv.refl R; { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Equations
- RingEquiv.instInhabitedRingEquiv R = { default := RingEquiv.refl R }
The inverse of a ring isomorphism is a ring isomorphism.
Equations
- RingEquiv.symm e = let __src := MulEquiv.symm (RingEquiv.toMulEquiv e); let __src_1 := AddEquiv.symm (RingEquiv.toAddEquiv e); { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
A ring is isomorphic to the opposite of its opposite.
Equations
- RingEquiv.opOp R = let __spread.0 := MulEquiv.opOp R; { toEquiv := __spread.0.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
A non-unital commutative ring is isomorphic to its opposite.
Equations
- RingEquiv.toOpposite R = let __src := MulOpposite.opEquiv; { toEquiv := __src, 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 = let __src := Equiv.ofBijective (⇑f) hf; { toEquiv := __src, 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
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
- One or more equations did not get rendered due to their size.
Instances For
Reinterpret a ring equivalence as a ring homomorphism.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two paths coercion can take to a NonUnitalRingEquiv
are equivalent
Reinterpret a ring equivalence as a monoid homomorphism.
Equations
Instances For
Reinterpret a ring equivalence as an AddMonoid
homomorphism.
Equations
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 = { toEquiv := { 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 = { toEquiv := { 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 = let __src := (↑f).toEquiv; let __src_1 := ↑f; let __src_2 := AddEquiv.mk' (↑f).toEquiv H; { toEquiv := __src, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Gives a RingEquiv
from an element of an AddEquivClass
preserving addition.
Equations
- AddEquiv.toRingEquiv f H = let __src := (↑f).toEquiv; let __src_1 := ↑f; let __src_2 := MulEquiv.mk' (↑f).toEquiv H; { toEquiv := __src, map_mul' := ⋯, map_add' := ⋯ }
Instances For
If two rings are isomorphic, and the second doesn't have zero divisors, then so does the first.