Star monoids, rings, and modules #
We introduce the basic algebraic notions of star monoids, star rings, and star modules. A star algebra is simply a star ring that is also a star module.
These are implemented as "mixin" typeclasses, so to summon a star ring (for example)
one needs to write (R : Type*) [Ring R] [StarRing R].
This avoids difficulties with diamond inheritance.
For now we simply do not introduce notations,
as different users are expected to feel strongly about the relative merits of
r^*, r†, rᘁ, and so on.
Our star rings are actually star non-unital, non-associative, semirings, but of course we can prove
star_neg : star (-r) = - star r when the underlying semiring is a ring.
Typeclass for a star operation with is involutive.
- star : R → R
- star_involutive : Function.Involutive star
Involutive condition.
Instances
Alias of the reverse direction of semiconjBy_star_star_star.
Alias of the reverse direction of commute_star_star.
star as a MulAut for commutative R.
Equations
- starMulAut = { toFun := star, invFun := (Function.Involutive.toPerm star ⋯).invFun, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Any commutative monoid admits the trivial *-structure.
See note [reducible non-instances].
Equations
- starMulOfComm = { star := id, star_involutive := ⋯, star_mul := ⋯ }
Instances For
Note that since starMulOfComm is reducible, simp can already prove this.
A *-additive monoid R is an additive monoid with an involutive star operation which
preserves addition.
Instances
Equations
- starAddEquiv = { toFun := star, invFun := (Function.Involutive.toPerm star ⋯).invFun, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }
Instances For
Equations
- StarRing.toStarAddMonoid = { toInvolutiveStar := inst✝.toInvolutiveStar, star_add := ⋯ }
star as a RingEquiv from R to Rᵐᵒᵖ
Equations
- starRingEquiv = { toFun := fun (x : R) => MulOpposite.op (star x), invFun := (starAddEquiv.trans MulOpposite.opAddEquiv).invFun, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
star as a ring automorphism, for commutative R.
Equations
- starRingAut = { toFun := star, invFun := starAddEquiv.invFun, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯ }
Instances For
star as a ring endomorphism, for commutative R. This is used to denote complex
conjugation, and is available under the notation conj in the scope ComplexConjugate.
Note that this is the preferred form (over starRingAut, available under the same hypotheses)
because the notation E →ₗ⋆[R] F for an R-conjugate-linear map (short for
E →ₛₗ[starRingEnd R] F) does not pretty-print if there is a coercion involved, as would be the
case for (↑starRingAut : R →* R).
Equations
Instances For
star as a ring endomorphism, for commutative R. This is used to denote complex
conjugation, and is available under the notation conj in the scope ComplexConjugate.
Note that this is the preferred form (over starRingAut, available under the same hypotheses)
because the notation E →ₗ⋆[R] F for an R-conjugate-linear map (short for
E →ₛₗ[starRingEnd R] F) does not pretty-print if there is a coercion involved, as would be the
case for (↑starRingAut : R →* R).
Equations
- ComplexConjugate.termConj = Lean.ParserDescr.node `ComplexConjugate.termConj 1024 (Lean.ParserDescr.symbol "conj")
Instances For
This is not a simp lemma, since we usually want simp to keep starRingEnd bundled.
For example, for complex conjugation, we don't want simp to turn conj x
into the bare function star x automatically since most lemmas are about conj x.
Equations
- RingHom.involutiveStar = { star := fun (f : S →+* R) => (starRingEnd R).comp f, star_involutive := ⋯ }
Alias of starRingEnd_self_apply.
Alias of starRingEnd_self_apply.
Any commutative semiring admits the trivial *-structure.
See note [reducible non-instances].
Equations
- starRingOfComm = { toStarMul := starMulOfComm, star_add := ⋯ }
Instances For
A star module A over a star ring R is a module which is a star add monoid,
and the two star structures are compatible in the sense
star (r • a) = star r • star a.
Note that it is up to the user of this typeclass to enforce
[Semiring R] [StarRing R] [AddCommMonoid A] [StarAddMonoid A] [Module R A], and that
the statement only requires [Star R] [Star A] [SMul R A].
If used as [CommRing R] [StarRing R] [Semiring A] [StarRing A] [Algebra R A], this represents a
star algebra.
starcommutes with scalar multiplication
Instances
A commutative star monoid is a star module over itself via Monoid.toMulAction.
Instance needed to define star-linear maps over a commutative star ring (ex: conjugate-linear maps when R = ℂ).
Instances #
The opposite type carries the same star operation.
Equations
- MulOpposite.instStar = { star := fun (r : Rᵐᵒᵖ) => MulOpposite.op (star (MulOpposite.unop r)) }
Equations
- MulOpposite.instInvolutiveStar = { toStar := MulOpposite.instStar, star_involutive := ⋯ }
Equations
- MulOpposite.instStarMul = { toInvolutiveStar := MulOpposite.instInvolutiveStar, star_mul := ⋯ }
Equations
- MulOpposite.instStarAddMonoid = { toInvolutiveStar := MulOpposite.instInvolutiveStar, star_add := ⋯ }
Equations
- MulOpposite.instStarRing = { toStarMul := MulOpposite.instStarMul, star_add := ⋯ }
A commutative star monoid is a star module over its opposite via
Monoid.toOppositeMulAction.