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 = { 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 = 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
star
commutes with addition
Instances
Equations
- starAddEquiv = { toFun := star, invFun := (Function.Involutive.toPerm star ⋯).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
star
commutes with addition
Instances
Equations
- StarRing.toStarAddMonoid = StarAddMonoid.mk ⋯
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 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 = 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.
star
commutes with scalar multiplication
Instances
A commutative star monoid is a star module over itself via Monoid.toMulAction
.
Equations
- ⋯ = ⋯
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
- ⋯ = ⋯