(Semi)ring equivs #
In this file we define an extension of Equiv called RingEquiv, which is a datatype representing
an isomorphism of Semirings, Rings, DivisionRings, or Fields.
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₂ = let __src := (↑f).inverse g h₁ h₂; let __src := (↑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
- 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
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
- instCoeTCRingEquivOfRingEquivClass = { 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.instInhabited R = { default := RingEquiv.refl R }
The inverse of a ring isomorphism is a ring isomorphism.
Equations
- e.symm = let __src := e.toMulEquiv.symm; let __src_1 := e.toAddEquiv.symm; { toEquiv := __src.toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
Auxilliary 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₂ = let __src := e₁.toMulEquiv.trans e₂.toMulEquiv; let __src_1 := e₁.toAddEquiv.trans e₂.toAddEquiv; { 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
- e.toNonUnitalRingHom = let __src := e.toMulEquiv.toMulHom; let __src_1 := e.toAddEquiv.toAddMonoidHom; { toMulHom := __src, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Reinterpret a ring equivalence as a ring homomorphism.
Equations
- e.toRingHom = let __src := e.toMulEquiv.toMonoidHom; let __src_1 := e.toAddEquiv.toAddMonoidHom; { toMonoidHom := __src, 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 = 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.