Skip to content

Commit bca1c69

Browse files
committed
feat: define NonUnital(Semi)NormedCommRing (#8664)
This adds commutative versions of the existing `NonUnital(Semi)NormedRing` classes. This is essential for talking about, for example, non-unital commutative C⋆-algebras.
1 parent eda0f8d commit bca1c69

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

Mathlib/Analysis/Normed/Field/Basic.lean

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,24 @@ instance (priority := 100) NormedRing.toNonUnitalNormedRing [β : NormedRing α]
101101
{ β with }
102102
#align normed_ring.to_non_unital_normed_ring NormedRing.toNonUnitalNormedRing
103103

104+
/-- A non-unital seminormed commutative ring is a non-unital commutative ring endowed with a
105+
seminorm which satisfies the inequality `‖x y‖ ≤ ‖x‖ ‖y‖`. -/
106+
class NonUnitalSeminormedCommRing (α : Type*) extends NonUnitalSeminormedRing α where
107+
/-- Multiplication is commutative. -/
108+
mul_comm : ∀ x y : α, x * y = y * x
109+
110+
/-- A non-unital normed commutative ring is a non-unital commutative ring endowed with a
111+
norm which satisfies the inequality `‖x y‖ ≤ ‖x‖ ‖y‖`. -/
112+
class NonUnitalNormedCommRing (α : Type*) extends NonUnitalNormedRing α where
113+
/-- Multiplication is commutative. -/
114+
mul_comm : ∀ x y : α, x * y = y * x
115+
116+
-- see Note [lower instance priority]
117+
/-- A non-unital normed commutative ring is a non-unital seminormed commutative ring. -/
118+
instance (priority := 100) NonUnitalNormedCommRing.toNonUnitalSeminormedCommRing
119+
[β : NonUnitalNormedCommRing α] : NonUnitalSeminormedCommRing α :=
120+
{ β with }
121+
104122
/-- A seminormed commutative ring is a commutative ring endowed with a seminorm which satisfies
105123
the inequality `‖x y‖ ≤ ‖x‖ ‖y‖`. -/
106124
class SeminormedCommRing (α : Type*) extends SeminormedRing α where
@@ -115,6 +133,18 @@ class NormedCommRing (α : Type*) extends NormedRing α where
115133
mul_comm : ∀ x y : α, x * y = y * x
116134
#align normed_comm_ring NormedCommRing
117135

136+
-- see Note [lower instance priority]
137+
/-- A seminormed commutative ring is a non-unital seminormed commutative ring. -/
138+
instance (priority := 100) SeminormedCommRing.toNonUnitalSeminormedCommRing
139+
[β : SeminormedCommRing α] : NonUnitalSeminormedCommRing α :=
140+
{ β with }
141+
142+
-- see Note [lower instance priority]
143+
/-- A normed commutative ring is a non-unital normed commutative ring. -/
144+
instance (priority := 100) NormedCommRing.toNonUnitalNormedCommRing
145+
[β : NormedCommRing α] : NonUnitalNormedCommRing α :=
146+
{ β with }
147+
118148
-- see Note [lower instance priority]
119149
/-- A normed commutative ring is a seminormed commutative ring. -/
120150
instance (priority := 100) NormedCommRing.toSeminormedCommRing [β : NormedCommRing α] :
@@ -147,6 +177,11 @@ theorem NormOneClass.nontrivial (α : Type*) [SeminormedAddCommGroup α] [One α
147177
nontrivial_of_ne 0 1 <| ne_of_apply_ne norm <| by simp
148178
#align norm_one_class.nontrivial NormOneClass.nontrivial
149179

180+
-- see Note [lower instance priority]
181+
instance (priority := 100) NonUnitalSeminormedCommRing.toNonUnitalCommRing
182+
[β : NonUnitalSeminormedCommRing α] : NonUnitalCommRing α :=
183+
{ β with }
184+
150185
-- see Note [lower instance priority]
151186
instance (priority := 100) SeminormedCommRing.toCommRing [β : SeminormedCommRing α] : CommRing α :=
152187
{ β with }
@@ -463,6 +498,53 @@ instance MulOpposite.normedRing : NormedRing αᵐᵒᵖ :=
463498

464499
end NormedRing
465500

501+
section NonUnitalSeminormedCommRing
502+
503+
variable [NonUnitalSeminormedCommRing α]
504+
505+
instance ULift.nonUnitalSeminormedCommRing : NonUnitalSeminormedCommRing (ULift α) :=
506+
{ ULift.nonUnitalSeminormedRing, ULift.nonUnitalCommRing with }
507+
508+
/-- Non-unital seminormed commutative ring structure on the product of two non-unital seminormed
509+
commutative rings, using the sup norm. -/
510+
instance Prod.nonUnitalSeminormedCommRing [NonUnitalSeminormedCommRing β] :
511+
NonUnitalSeminormedCommRing (α × β) :=
512+
{ nonUnitalSeminormedRing, instNonUnitalCommRing with }
513+
514+
/-- Non-unital seminormed commutative ring structure on the product of finitely many non-unital
515+
seminormed commutative rings, using the sup norm. -/
516+
instance Pi.nonUnitalSeminormedCommRing {π : ι → Type*} [Fintype ι]
517+
[∀ i, NonUnitalSeminormedCommRing (π i)] : NonUnitalSeminormedCommRing (∀ i, π i) :=
518+
{ Pi.nonUnitalSeminormedRing, Pi.nonUnitalCommRing with }
519+
520+
instance MulOpposite.nonUnitalSeminormedCommRing : NonUnitalSeminormedCommRing αᵐᵒᵖ :=
521+
{ MulOpposite.nonUnitalSeminormedRing, MulOpposite.nonUnitalCommRing α with }
522+
523+
end NonUnitalSeminormedCommRing
524+
section NonUnitalNormedCommRing
525+
526+
variable [NonUnitalNormedCommRing α]
527+
528+
instance ULift.nonUnitalNormedCommRing : NonUnitalNormedCommRing (ULift α) :=
529+
{ ULift.nonUnitalSeminormedCommRing, ULift.normedAddCommGroup with }
530+
531+
/-- Non-unital normed commutative ring structure on the product of two non-unital normed
532+
commutative rings, using the sup norm. -/
533+
instance Prod.nonUnitalNormedCommRing [NonUnitalNormedCommRing β] :
534+
NonUnitalNormedCommRing (α × β) :=
535+
{ Prod.nonUnitalSeminormedCommRing, Prod.normedAddCommGroup with }
536+
537+
/-- Normed commutative ring structure on the product of finitely many non-unital normed
538+
commutative rings, using the sup norm. -/
539+
instance Pi.nonUnitalNormedCommRing {π : ι → Type*} [Fintype ι]
540+
[∀ i, NonUnitalNormedCommRing (π i)] : NonUnitalNormedCommRing (∀ i, π i) :=
541+
{ Pi.nonUnitalSeminormedCommRing, Pi.normedAddCommGroup with }
542+
543+
instance MulOpposite.nonUnitalNormedCommRing : NonUnitalNormedCommRing αᵐᵒᵖ :=
544+
{ MulOpposite.nonUnitalSeminormedCommRing, MulOpposite.normedAddCommGroup with }
545+
546+
end NonUnitalNormedCommRing
547+
466548
-- see Note [lower instance priority]
467549
instance (priority := 100) semi_normed_ring_top_monoid [NonUnitalSeminormedRing α] :
468550
ContinuousMul α :=
@@ -1021,6 +1103,23 @@ def NormedRing.induced [Ring R] [NormedRing S] [NonUnitalRingHomClass F R S] (f
10211103
{ NonUnitalSeminormedRing.induced R S f, NormedAddCommGroup.induced R S f hf, ‹Ring R› with }
10221104
#align normed_ring.induced NormedRing.induced
10231105

1106+
/-- A non-unital ring homomorphism from a `NonUnitalCommRing` to a `NonUnitalSeminormedCommRing`
1107+
induces a `NonUnitalSeminormedCommRing` structure on the domain.
1108+
1109+
See note [reducible non-instances] -/
1110+
@[reducible]
1111+
def NonUnitalSeminormedCommRing.induced [NonUnitalCommRing R] [NonUnitalSeminormedCommRing S]
1112+
[NonUnitalRingHomClass F R S] (f : F) : NonUnitalSeminormedCommRing R :=
1113+
{ NonUnitalSeminormedRing.induced R S f, ‹NonUnitalCommRing R› with }
1114+
1115+
/-- An injective non-unital ring homomorphism from a `NonUnitalCommRing` to a
1116+
`NonUnitalNormedCommRing` induces a `NonUnitalNormedCommRing` structure on the domain.
1117+
1118+
See note [reducible non-instances] -/
1119+
@[reducible]
1120+
def NonUnitalNormedCommRing.induced [NonUnitalCommRing R] [NonUnitalNormedCommRing S]
1121+
[NonUnitalRingHomClass F R S] (f : F) (hf : Function.Injective f) : NonUnitalNormedCommRing R :=
1122+
{ NonUnitalNormedRing.induced R S f hf, ‹NonUnitalCommRing R› with }
10241123
/-- A non-unital ring homomorphism from a `CommRing` to a `SeminormedRing` induces a
10251124
`SeminormedCommRing` structure on the domain.
10261125

0 commit comments

Comments
 (0)