Skip to content

Commit 3bd2603

Browse files
committed
chore: remove double instance on CommRing (SeparationQuotient α) (#37481)
We had two different instances giving ` CommRing (SeparationQuotient α)`, defined differently and independently (and non-defeq). This PR removes one of them. Co-authored-by: sgouezel <[email protected]>
1 parent 754e99e commit 3bd2603

File tree

2 files changed

+52
-53
lines changed

2 files changed

+52
-53
lines changed

Mathlib/Topology/Algebra/SeparationQuotient/Basic.lean

Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,21 @@ instance instContinuousMul [Mul M] [ContinuousMul M] : ContinuousMul (Separation
102102

103103
@[to_additive]
104104
instance instCommMagma [CommMagma M] [ContinuousMul M] : CommMagma (SeparationQuotient M) :=
105-
surjective_mk.commMagma mk mk_mul
105+
fast_instance% surjective_mk.commMagma mk mk_mul
106106

107107
@[to_additive]
108108
instance instSemigroup [Semigroup M] [ContinuousMul M] : Semigroup (SeparationQuotient M) :=
109-
surjective_mk.semigroup mk mk_mul
109+
fast_instance% surjective_mk.semigroup mk mk_mul
110110

111111
@[to_additive]
112112
instance instCommSemigroup [CommSemigroup M] [ContinuousMul M] :
113113
CommSemigroup (SeparationQuotient M) :=
114-
surjective_mk.commSemigroup mk mk_mul
114+
fast_instance% surjective_mk.commSemigroup mk mk_mul
115115

116116
@[to_additive]
117117
instance instMulOneClass [MulOneClass M] [ContinuousMul M] :
118118
MulOneClass (SeparationQuotient M) :=
119-
surjective_mk.mulOneClass mk mk_one mk_mul
119+
fast_instance% surjective_mk.mulOneClass mk mk_one mk_mul
120120

121121
/-- `SeparationQuotient.mk` as a `MonoidHom`. -/
122122
@[to_additive (attr := simps) /-- `SeparationQuotient.mk` as an `AddMonoidHom`. -/]
@@ -138,11 +138,11 @@ theorem mk_pow [Monoid M] [ContinuousMul M] (x : M) (n : ℕ) : mk (x ^ n) = (mk
138138

139139
@[to_additive]
140140
instance instMonoid [Monoid M] [ContinuousMul M] : Monoid (SeparationQuotient M) :=
141-
surjective_mk.monoid mk mk_one mk_mul mk_pow
141+
fast_instance% surjective_mk.monoid mk mk_one mk_mul mk_pow
142142

143143
@[to_additive]
144144
instance instCommMonoid [CommMonoid M] [ContinuousMul M] : CommMonoid (SeparationQuotient M) :=
145-
surjective_mk.commMonoid mk mk_one mk_mul mk_pow
145+
fast_instance% surjective_mk.commMonoid mk mk_one mk_mul mk_pow
146146

147147
end Monoid
148148

@@ -194,11 +194,11 @@ theorem mk_zpow [Group G] [IsTopologicalGroup G] (x : G) (n : ℤ) : mk (x ^ n)
194194

195195
@[to_additive]
196196
instance instGroup [Group G] [IsTopologicalGroup G] : Group (SeparationQuotient G) :=
197-
surjective_mk.group mk mk_one mk_mul mk_inv mk_div mk_pow mk_zpow
197+
fast_instance% surjective_mk.group mk mk_one mk_mul mk_inv mk_div mk_pow mk_zpow
198198

199199
@[to_additive]
200200
instance instCommGroup [CommGroup G] [IsTopologicalGroup G] : CommGroup (SeparationQuotient G) :=
201-
surjective_mk.commGroup mk mk_one mk_mul mk_inv mk_div mk_pow mk_zpow
201+
fast_instance% surjective_mk.commGroup mk mk_one mk_mul mk_inv mk_div mk_pow mk_zpow
202202

203203
@[to_additive]
204204
instance instIsTopologicalGroup [Group G] [IsTopologicalGroup G] :
@@ -223,23 +223,23 @@ variable {M₀ : Type*} [TopologicalSpace M₀]
223223

224224
instance instMulZeroClass [MulZeroClass M₀] [ContinuousMul M₀] :
225225
MulZeroClass (SeparationQuotient M₀) :=
226-
surjective_mk.mulZeroClass mk mk_zero mk_mul
226+
fast_instance% surjective_mk.mulZeroClass mk mk_zero mk_mul
227227

228228
instance instSemigroupWithZero [SemigroupWithZero M₀] [ContinuousMul M₀] :
229229
SemigroupWithZero (SeparationQuotient M₀) :=
230-
surjective_mk.semigroupWithZero mk mk_zero mk_mul
230+
fast_instance% surjective_mk.semigroupWithZero mk mk_zero mk_mul
231231

232232
instance instMulZeroOneClass [MulZeroOneClass M₀] [ContinuousMul M₀] :
233233
MulZeroOneClass (SeparationQuotient M₀) :=
234-
surjective_mk.mulZeroOneClass mk mk_zero mk_one mk_mul
234+
fast_instance% surjective_mk.mulZeroOneClass mk mk_zero mk_one mk_mul
235235

236236
instance instMonoidWithZero [MonoidWithZero M₀] [ContinuousMul M₀] :
237237
MonoidWithZero (SeparationQuotient M₀) :=
238-
surjective_mk.monoidWithZero mk mk_zero mk_one mk_mul mk_pow
238+
fast_instance% surjective_mk.monoidWithZero mk mk_zero mk_one mk_mul mk_pow
239239

240240
instance instCommMonoidWithZero [CommMonoidWithZero M₀] [ContinuousMul M₀] :
241241
CommMonoidWithZero (SeparationQuotient M₀) :=
242-
surjective_mk.commMonoidWithZero mk mk_zero mk_one mk_mul mk_pow
242+
fast_instance% surjective_mk.commMonoidWithZero mk mk_zero mk_one mk_mul mk_pow
243243

244244
end MonoidWithZero
245245

@@ -249,7 +249,7 @@ variable {R : Type*} [TopologicalSpace R]
249249

250250
instance instDistrib [Distrib R] [ContinuousMul R] [ContinuousAdd R] :
251251
Distrib (SeparationQuotient R) :=
252-
surjective_mk.distrib mk mk_add mk_mul
252+
fast_instance% surjective_mk.distrib mk mk_add mk_mul
253253

254254
instance instLeftDistribClass [Mul R] [Add R] [LeftDistribClass R]
255255
[ContinuousMul R] [ContinuousAdd R] :
@@ -263,11 +263,14 @@ instance instRightDistribClass [Mul R] [Add R] [RightDistribClass R]
263263

264264
instance instNonUnitalnonAssocSemiring [NonUnitalNonAssocSemiring R]
265265
[IsTopologicalSemiring R] : NonUnitalNonAssocSemiring (SeparationQuotient R) :=
266-
surjective_mk.nonUnitalNonAssocSemiring mk mk_zero mk_add mk_mul mk_smul
266+
fast_instance% surjective_mk.nonUnitalNonAssocSemiring mk mk_zero mk_add mk_mul mk_smul
267+
268+
instance instIsTopologicalSemiring [NonUnitalNonAssocSemiring R] [IsTopologicalSemiring R] :
269+
IsTopologicalSemiring (SeparationQuotient R) where
267270

268271
instance instNonUnitalSemiring [NonUnitalSemiring R] [IsTopologicalSemiring R] :
269272
NonUnitalSemiring (SeparationQuotient R) :=
270-
surjective_mk.nonUnitalSemiring mk mk_zero mk_add mk_mul mk_smul
273+
fast_instance% surjective_mk.nonUnitalSemiring mk mk_zero mk_add mk_mul mk_smul
271274

272275
instance instNatCast [NatCast R] : NatCast (SeparationQuotient R) where
273276
natCast n := mk n
@@ -288,59 +291,66 @@ theorem mk_intCast [IntCast R] (n : ℤ) : mk (n : R) = n := rfl
288291

289292
instance instNonAssocSemiring [NonAssocSemiring R] [IsTopologicalSemiring R] :
290293
NonAssocSemiring (SeparationQuotient R) :=
291-
surjective_mk.nonAssocSemiring mk mk_zero mk_one mk_add mk_mul mk_smul mk_natCast
294+
fast_instance% surjective_mk.nonAssocSemiring mk mk_zero mk_one mk_add mk_mul mk_smul mk_natCast
292295

293296
instance instNonUnitalNonAssocRing [NonUnitalNonAssocRing R] [IsTopologicalRing R] :
294297
NonUnitalNonAssocRing (SeparationQuotient R) :=
295-
surjective_mk.nonUnitalNonAssocRing mk mk_zero mk_add mk_mul mk_neg mk_sub mk_smul mk_smul
298+
fast_instance% surjective_mk.nonUnitalNonAssocRing mk mk_zero mk_add mk_mul mk_neg mk_sub
299+
mk_smul mk_smul
300+
301+
instance instIsTopologicalRing [NonUnitalNonAssocRing R] [IsTopologicalRing R] :
302+
IsTopologicalRing (SeparationQuotient R) where
296303

297304
instance instNonUnitalRing [NonUnitalRing R] [IsTopologicalRing R] :
298305
NonUnitalRing (SeparationQuotient R) :=
299-
surjective_mk.nonUnitalRing mk mk_zero mk_add mk_mul mk_neg mk_sub mk_smul mk_smul
306+
fast_instance% surjective_mk.nonUnitalRing mk mk_zero mk_add mk_mul mk_neg mk_sub mk_smul mk_smul
300307

301308
instance instNonAssocRing [NonAssocRing R] [IsTopologicalRing R] :
302309
NonAssocRing (SeparationQuotient R) :=
303-
surjective_mk.nonAssocRing mk mk_zero mk_one mk_add mk_mul mk_neg mk_sub mk_smul mk_smul
304-
mk_natCast mk_intCast
310+
fast_instance% surjective_mk.nonAssocRing mk mk_zero mk_one mk_add mk_mul mk_neg mk_sub
311+
mk_smul mk_smul mk_natCast mk_intCast
305312

306313
instance instSemiring [Semiring R] [IsTopologicalSemiring R] :
307314
Semiring (SeparationQuotient R) :=
308-
surjective_mk.semiring mk mk_zero mk_one mk_add mk_mul mk_smul mk_pow mk_natCast
315+
fast_instance% surjective_mk.semiring mk mk_zero mk_one mk_add mk_mul mk_smul mk_pow mk_natCast
309316

310317
instance instRing [Ring R] [IsTopologicalRing R] :
311318
Ring (SeparationQuotient R) :=
312-
surjective_mk.ring mk mk_zero mk_one mk_add mk_mul mk_neg mk_sub mk_smul mk_smul mk_pow
313-
mk_natCast mk_intCast
319+
fast_instance% surjective_mk.ring mk mk_zero mk_one mk_add mk_mul mk_neg mk_sub mk_smul
320+
mk_smul mk_pow mk_natCast mk_intCast
314321

315322
instance instNonUnitalNonAssocCommSemiring [NonUnitalNonAssocCommSemiring R]
316323
[IsTopologicalSemiring R] :
317324
NonUnitalNonAssocCommSemiring (SeparationQuotient R) :=
318-
surjective_mk.nonUnitalNonAssocCommSemiring mk mk_zero mk_add mk_mul mk_smul
325+
fast_instance% surjective_mk.nonUnitalNonAssocCommSemiring mk mk_zero mk_add mk_mul mk_smul
319326

320327
instance instNonUnitalCommSemiring [NonUnitalCommSemiring R] [IsTopologicalSemiring R] :
321328
NonUnitalCommSemiring (SeparationQuotient R) :=
322-
surjective_mk.nonUnitalCommSemiring mk mk_zero mk_add mk_mul mk_smul
329+
fast_instance% surjective_mk.nonUnitalCommSemiring mk mk_zero mk_add mk_mul mk_smul
323330

324331
instance instCommSemiring [CommSemiring R] [IsTopologicalSemiring R] :
325332
CommSemiring (SeparationQuotient R) :=
326-
surjective_mk.commSemiring mk mk_zero mk_one mk_add mk_mul mk_smul mk_pow mk_natCast
333+
fast_instance% surjective_mk.commSemiring mk mk_zero mk_one mk_add mk_mul mk_smul
334+
mk_pow mk_natCast
327335

328336
instance instHasDistribNeg [Mul R] [HasDistribNeg R] [ContinuousMul R] [ContinuousNeg R] :
329337
HasDistribNeg (SeparationQuotient R) :=
330-
surjective_mk.hasDistribNeg mk mk_neg mk_mul
338+
fast_instance% surjective_mk.hasDistribNeg mk mk_neg mk_mul
331339

332340
instance instNonUnitalNonAssocCommRing [NonUnitalNonAssocCommRing R] [IsTopologicalRing R] :
333341
NonUnitalNonAssocCommRing (SeparationQuotient R) :=
334-
surjective_mk.nonUnitalNonAssocCommRing mk mk_zero mk_add mk_mul mk_neg mk_sub mk_smul mk_smul
342+
fast_instance% surjective_mk.nonUnitalNonAssocCommRing mk mk_zero mk_add mk_mul mk_neg mk_sub
343+
mk_smul mk_smul
335344

336345
instance instNonUnitalCommRing [NonUnitalCommRing R] [IsTopologicalRing R] :
337346
NonUnitalCommRing (SeparationQuotient R) :=
338-
surjective_mk.nonUnitalCommRing mk mk_zero mk_add mk_mul mk_neg mk_sub mk_smul mk_smul
347+
fast_instance% surjective_mk.nonUnitalCommRing mk mk_zero mk_add mk_mul mk_neg mk_sub
348+
mk_smul mk_smul
339349

340350
instance instCommRing [CommRing R] [IsTopologicalRing R] :
341351
CommRing (SeparationQuotient R) :=
342-
surjective_mk.commRing mk mk_zero mk_one mk_add mk_mul mk_neg mk_sub mk_smul mk_smul mk_pow
343-
mk_natCast mk_intCast
352+
fast_instance% surjective_mk.commRing mk mk_zero mk_one mk_add mk_mul mk_neg mk_sub
353+
mk_smul mk_smul mk_pow mk_natCast mk_intCast
344354

345355
/-- `SeparationQuotient.mk` as a `RingHom`. -/
346356
@[simps]
@@ -357,17 +367,17 @@ variable {M A : Type*} [TopologicalSpace A]
357367
instance instDistribSMul [AddZeroClass A] [DistribSMul M A]
358368
[ContinuousAdd A] [ContinuousConstSMul M A] :
359369
DistribSMul M (SeparationQuotient A) :=
360-
surjective_mk.distribSMul mkAddMonoidHom mk_smul
370+
fast_instance% surjective_mk.distribSMul mkAddMonoidHom mk_smul
361371

362372
instance instDistribMulAction [Monoid M] [AddMonoid A] [DistribMulAction M A]
363373
[ContinuousAdd A] [ContinuousConstSMul M A] :
364374
DistribMulAction M (SeparationQuotient A) :=
365-
surjective_mk.distribMulAction mkAddMonoidHom mk_smul
375+
fast_instance% surjective_mk.distribMulAction mkAddMonoidHom mk_smul
366376

367377
instance instMulDistribMulAction [Monoid M] [Monoid A] [MulDistribMulAction M A]
368378
[ContinuousMul A] [ContinuousConstSMul M A] :
369379
MulDistribMulAction M (SeparationQuotient A) :=
370-
surjective_mk.mulDistribMulAction mkMonoidHom mk_smul
380+
fast_instance% surjective_mk.mulDistribMulAction mkMonoidHom mk_smul
371381

372382
end DistribSMul
373383

@@ -379,7 +389,7 @@ variable {R S M N : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
379389
[TopologicalSpace N]
380390

381391
instance instModule : Module R (SeparationQuotient M) :=
382-
surjective_mk.module R mkAddMonoidHom mk_smul
392+
fast_instance% surjective_mk.module R mkAddMonoidHom mk_smul
383393

384394
variable (R M)
385395

Mathlib/Topology/Algebra/UniformRing.lean

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public import Mathlib.Algebra.Ring.TransferInstance
1111
public import Mathlib.Topology.Algebra.GroupCompletion
1212
public import Mathlib.Topology.Algebra.Ring.Ideal
1313
public import Mathlib.Topology.Algebra.IsUniformGroup.Basic
14+
public import Mathlib.Topology.Algebra.SeparationQuotient.Basic
1415

1516
/-!
1617
# Completion of topological rings:
@@ -239,34 +240,22 @@ theorem inseparableSetoid_ring (α) [Ring α] [TopologicalSpace α] [IsTopologic
239240
/-- Given a topological ring `α` equipped with a uniform structure that makes subtraction uniformly
240241
continuous, get a homeomorphism between the separated quotient of `α` and the quotient ring
241242
corresponding to the closure of zero. -/
242-
def sepQuotHomeomorphRingQuot (α) [CommRing α] [TopologicalSpace α] [IsTopologicalRing α] :
243+
def sepQuotHomeomorphRingQuot (α) [Ring α] [TopologicalSpace α] [IsTopologicalRing α] :
243244
SeparationQuotient α ≃ₜ α ⧸ (⊥ : Ideal α).closure where
244245
toEquiv := Quotient.congrRight fun x y => by rw [inseparableSetoid_ring]
245246
continuous_toFun := continuous_id.quotient_map' <| by
246247
rw [inseparableSetoid_ring]; exact fun _ _ ↦ id
247248
continuous_invFun := continuous_id.quotient_map' <| by
248249
rw [inseparableSetoid_ring]; exact fun _ _ ↦ id
249250

250-
instance commRing [CommRing α] [TopologicalSpace α] [IsTopologicalRing α] :
251-
CommRing (SeparationQuotient α) :=
252-
(sepQuotHomeomorphRingQuot _).commRing
253-
254251
/-- Given a topological ring `α` equipped with a uniform structure that makes subtraction uniformly
255252
continuous, get an equivalence between the separated quotient of `α` and the quotient ring
256253
corresponding to the closure of zero. -/
257254
def sepQuotRingEquivRingQuot (α) [CommRing α] [TopologicalSpace α] [IsTopologicalRing α] :
258-
SeparationQuotient α ≃+* α ⧸ (⊥ : Ideal α).closure :=
259-
(sepQuotHomeomorphRingQuot _).ringEquiv
260-
261-
instance topologicalRing [CommRing α] [TopologicalSpace α] [IsTopologicalRing α] :
262-
IsTopologicalRing (SeparationQuotient α) where
263-
toContinuousAdd :=
264-
(sepQuotHomeomorphRingQuot α).isInducing.continuousAdd (sepQuotRingEquivRingQuot α)
265-
toContinuousMul :=
266-
(sepQuotHomeomorphRingQuot α).isInducing.continuousMul (sepQuotRingEquivRingQuot α)
267-
toContinuousNeg :=
268-
(sepQuotHomeomorphRingQuot α).isInducing.continuousNeg <|
269-
map_neg (sepQuotRingEquivRingQuot α)
255+
SeparationQuotient α ≃+* α ⧸ (⊥ : Ideal α).closure where
256+
__ := sepQuotHomeomorphRingQuot α
257+
map_mul' := SeparationQuotient.surjective_mk.forall₂.2 (fun _ _ ↦ rfl)
258+
map_add' := SeparationQuotient.surjective_mk.forall₂.2 (fun _ _ ↦ rfl)
270259

271260
end UniformSpace
272261

0 commit comments

Comments
 (0)