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.
Closure under star.
Equations
- StarMemClass.instStar s = { star := fun (r : ↥s) => ⟨star ↑r, ⋯⟩ }
Typeclass for a star operation with is involutive.
- star : R → R
- star_involutive : Function.Involutive star
Involutive condition.
Instances
Involutive condition.
star as an equivalence when it is involutive.
Equations
- Equiv.star = Function.Involutive.toPerm star ⋯
Instances For
Condition that star is trivial
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 = let __src := Function.Involutive.toPerm star ⋯; { toFun := star, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯ }
Instances For
Any commutative monoid admits the trivial *-structure.
See note [reducible non-instances].
Equations
- starMulOfComm = StarMul.mk ⋯
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.
- star : R → R
- star_involutive : Function.Involutive star
starcommutes with addition
Instances
Equations
- starAddEquiv = let __src := Function.Involutive.toPerm star ⋯; { toFun := star, invFun := __src.invFun, left_inv := ⋯, right_inv := ⋯, map_add' := ⋯ }
Instances For
A *-ring R is a non-unital, non-associative (semi)ring with an involutive star operation
which is additive which makes R with its multiplicative structure into a *-multiplication
(i.e. star (r * s) = star s * star r).
- star : R → R
- star_involutive : Function.Involutive star
starcommutes with addition
Instances
Equations
- StarRing.toStarAddMonoid = StarAddMonoid.mk ⋯
star as a ring endomorphism, for commutative R. This is used to denote complex
conjugation, and is available under the notation conj in the locale 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
- starRingEnd R = ↑starRingAut
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 locale 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 = InvolutiveStar.mk ⋯
Alias of starRingEnd_self_apply.
Alias of starRingEnd_self_apply.
Any commutative semiring admits the trivial *-structure.
See note [reducible non-instances].
Equations
- starRingOfComm = let __src := starMulOfComm; StarRing.mk ⋯
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.
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯
Instance needed to define star-linear maps over a commutative star ring (ex: conjugate-linear maps when R = ℂ).
Equations
- ⋯ = ⋯
Instances #
Equations
- Units.instStarMul = StarMul.mk ⋯
Equations
- ⋯ = ⋯
Equations
- Invertible.star r = { invOf := star ⅟r, invOf_mul_self := ⋯, mul_invOf_self := ⋯ }
The opposite type carries the same star operation.
Equations
- MulOpposite.instStar = { star := fun (r : Rᵐᵒᵖ) => MulOpposite.op (star (MulOpposite.unop r)) }
Equations
- MulOpposite.instInvolutiveStar = InvolutiveStar.mk ⋯
Equations
- MulOpposite.instStarMul = StarMul.mk ⋯
Equations
- MulOpposite.instStarAddMonoid = StarAddMonoid.mk ⋯
Equations
- MulOpposite.instStarRing = StarRing.mk ⋯
A commutative star monoid is a star module over its opposite via
Monoid.toOppositeMulAction.
Equations
- ⋯ = ⋯