Skip to content

Commit c1a1f0d

Browse files
committed
chore(Topology): Generalised some of the instances for Function.locallyFinsuppWithin (#35807)
In this PR, we generalised the various instances for locally fin supp functions. These changes were originally made on the PR #26304 about algebraic cycles, but it was decided that these changes are more appropriate in their own PR. Co-authored-by: Raph-DG <raphaeldouglasgiles@gmail.com>
1 parent 3bd087c commit c1a1f0d

1 file changed

Lines changed: 61 additions & 24 deletions

File tree

Mathlib/Topology/LocallyFinsupp.lean

Lines changed: 61 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ lemma LocallyFiniteSupport.finite_inter_support_of_isCompact {W : Set X}
110110
rw [← lem f.support W]
111111
exact Finite.image Subtype.val this
112112

113+
lemma Function.locallyFinsupp.locallyFiniteSupport [Zero Y] (f : locallyFinsupp X Y) :
114+
LocallyFiniteSupport f.toFun :=
115+
(f.supportLocallyFiniteWithinDomain' · (by trivial))
116+
113117
namespace Function.locallyFinsuppWithin
114118

115119
/--
@@ -244,9 +248,9 @@ defined pointwise.
244248

245249
variable (U) in
246250
/--
247-
Functions with locally finite support within `U` form an additive subgroup of functions X → Y.
251+
Functions with locally finite support within `U` form an additive submonoid of functions `X → Y`.
248252
-/
249-
protected def addSubgroup [AddCommGroup Y] : AddSubgroup (X → Y) where
253+
protected def addSubmonoid [AddMonoid Y] : AddSubmonoid (X → Y) where
250254
carrier := {f | f.support ⊆ U ∧ ∀ z ∈ U, ∃ t ∈ 𝓝 z, Set.Finite (t ∩ f.support)}
251255
zero_mem' := by
252256
simp only [support_subset_iff, ne_eq, mem_setOf_eq, Pi.zero_apply, not_true_eq_false,
@@ -268,51 +272,84 @@ protected def addSubgroup [AddCommGroup Y] : AddSubgroup (X → Y) where
268272
mem_inter_iff, mem_support, Pi.add_apply, mem_union, true_and]
269273
by_contra! hCon
270274
simp_all
271-
neg_mem' {f} hf := by
272-
simp_all
273275

274-
protected lemma memAddSubgroup [AddCommGroup Y] (D : locallyFinsuppWithin U Y) :
276+
protected lemma memAddSubmonoid [AddMonoid Y] (D : locallyFinsuppWithin U Y) :
277+
(D : X → Y) ∈ locallyFinsuppWithin.addSubmonoid U :=
278+
⟨D.supportWithinDomain, D.supportLocallyFiniteWithinDomain⟩
279+
280+
variable (U) in
281+
/--
282+
Functions with locally finite support within `U` form an additive subgroup of functions `X → Y`.
283+
-/
284+
protected def addSubgroup [AddGroup Y] : AddSubgroup (X → Y) where
285+
carrier := {f | f.support ⊆ U ∧ ∀ z ∈ U, ∃ t ∈ 𝓝 z, Set.Finite (t ∩ f.support)}
286+
__ := locallyFinsuppWithin.addSubmonoid U
287+
neg_mem' {f} hf := by simp_all
288+
289+
protected lemma memAddSubgroup [AddGroup Y] (D : locallyFinsuppWithin U Y) :
275290
(D : X → Y) ∈ locallyFinsuppWithin.addSubgroup U :=
276291
⟨D.supportWithinDomain, D.supportLocallyFiniteWithinDomain⟩
277292

278293
/--
279294
Assign a function with locally finite support within `U` to a function in the subgroup.
280295
-/
281296
@[simps]
282-
def mk_of_mem [AddCommGroup Y] (f : X → Y) (hf : f ∈ locallyFinsuppWithin.addSubgroup U) :
297+
def mk_of_mem_addSubmonoid [AddMonoid Y] (f : X → Y)
298+
(hf : f ∈ locallyFinsuppWithin.addSubmonoid U) :
283299
locallyFinsuppWithin U Y := ⟨f, hf.1, hf.2
284300

285-
instance [AddCommGroup Y] : Zero (locallyFinsuppWithin U Y) where
286-
zero := mk_of_mem 0 <| zero_mem _
301+
instance [AddMonoid Y] : Zero (locallyFinsuppWithin U Y) where
302+
zero := mk_of_mem_addSubmonoid 0 <| zero_mem _
303+
304+
instance [AddMonoid Y] : Add (locallyFinsuppWithin U Y) where
305+
add D₁ D₂ := mk_of_mem_addSubmonoid (D₁ + D₂) <| add_mem D₁.memAddSubmonoid D₂.memAddSubmonoid
287306

288-
instance [AddCommGroup Y] : Add (locallyFinsuppWithin U Y) where
289-
add D₁ D₂ := mk_of_mem (D₁ + D₂) <| add_mem D₁.memAddSubgroup D₂.memAddSubgroup
307+
instance [AddMonoid Y] : SMul ℕ (locallyFinsuppWithin U Y) where
308+
smul n D := mk_of_mem_addSubmonoid (n • D) <| nsmul_mem D.memAddSubmonoid n
290309

291-
instance [AddCommGroup Y] : Neg (locallyFinsuppWithin U Y) where
292-
neg D := mk_of_mem (-D) <| neg_mem D.memAddSubgroup
310+
/--
311+
Assign a function with locally finite support within `U` to a function in the subgroup.
312+
-/
313+
@[simps]
314+
def mk_of_mem_addSubgroup [AddGroup Y] (f : X → Y) (hf : f ∈ locallyFinsuppWithin.addSubgroup U) :
315+
locallyFinsuppWithin U Y := ⟨f, hf.1, hf.2
293316

294-
instance [AddCommGroup Y] : Sub (locallyFinsuppWithin U Y) where
295-
sub D₁ D₂ := mk_of_mem (D₁ - D₂) <| sub_mem D₁.memAddSubgroup D₂.memAddSubgroup
317+
@[deprecated (since := "2026-03-06")] alias mk_of_mem := mk_of_mem_addSubgroup
296318

297-
instance [AddCommGroup Y] : SMul ℕ (locallyFinsuppWithin U Y) where
298-
smul n D := mk_of_mem (n • D) <| nsmul_mem D.memAddSubgroup n
319+
instance [AddGroup Y] : Neg (locallyFinsuppWithin U Y) where
320+
neg D := mk_of_mem_addSubgroup (-D) <| neg_mem D.memAddSubgroup
299321

300-
instance [AddCommGroup Y] : SMul ℤ (locallyFinsuppWithin U Y) where
301-
smul n D := mk_of_mem (n • D) <| zsmul_mem D.memAddSubgroup n
322+
instance [AddGroup Y] : Sub (locallyFinsuppWithin U Y) where
323+
sub D₁ D₂ := mk_of_mem_addSubgroup (D₁ - D₂) <| sub_mem D₁.memAddSubgroup D₂.memAddSubgroup
302324

303-
@[simp] lemma coe_zero [AddCommGroup Y] :
325+
instance [AddGroup Y] : SMul ℤ (locallyFinsuppWithin U Y) where
326+
smul n D := mk_of_mem_addSubgroup (n • D) <| zsmul_mem D.memAddSubgroup n
327+
328+
@[simp] lemma coe_zero [AddMonoid Y] :
304329
((0 : locallyFinsuppWithin U Y) : X → Y) = 0 := rfl
305-
@[simp] lemma coe_add [AddCommGroup Y] (D₁ D₂ : locallyFinsuppWithin U Y) :
330+
@[simp] lemma coe_add [AddMonoid Y] (D₁ D₂ : locallyFinsuppWithin U Y) :
306331
(↑(D₁ + D₂) : X → Y) = D₁ + D₂ := rfl
307-
@[simp] lemma coe_neg [AddCommGroup Y] (D : locallyFinsuppWithin U Y) :
332+
@[simp] lemma coe_neg [AddGroup Y] (D : locallyFinsuppWithin U Y) :
308333
(↑(-D) : X → Y) = -(D : X → Y) := rfl
309-
@[simp] lemma coe_sub [AddCommGroup Y] (D₁ D₂ : locallyFinsuppWithin U Y) :
334+
@[simp] lemma coe_sub [AddGroup Y] (D₁ D₂ : locallyFinsuppWithin U Y) :
310335
(↑(D₁ - D₂) : X → Y) = D₁ - D₂ := rfl
311-
@[simp] lemma coe_nsmul [AddCommGroup Y] (D : locallyFinsuppWithin U Y) (n : ℕ) :
336+
@[simp] lemma coe_nsmul [AddMonoid Y] (D : locallyFinsuppWithin U Y) (n : ℕ) :
312337
(↑(n • D) : X → Y) = n • (D : X → Y) := rfl
313-
@[simp] lemma coe_zsmul [AddCommGroup Y] (D : locallyFinsuppWithin U Y) (n : ℤ) :
338+
@[simp] lemma coe_zsmul [AddGroup Y] (D : locallyFinsuppWithin U Y) (n : ℤ) :
314339
(↑(n • D) : X → Y) = n • (D : X → Y) := rfl
315340

341+
instance [AddMonoid Y] : AddMonoid (locallyFinsuppWithin U Y) :=
342+
Injective.addMonoid (M₁ := locallyFinsuppWithin U Y) (M₂ := X → Y)
343+
_ coe_injective coe_zero coe_add coe_nsmul
344+
345+
instance [AddCommMonoid Y] : AddCommMonoid (locallyFinsuppWithin U Y) :=
346+
Injective.addCommMonoid (M₁ := locallyFinsuppWithin U Y) (M₂ := X → Y)
347+
_ coe_injective coe_zero coe_add coe_nsmul
348+
349+
instance [AddGroup Y] : AddGroup (locallyFinsuppWithin U Y) :=
350+
Injective.addGroup (M₁ := locallyFinsuppWithin U Y) (M₂ := X → Y)
351+
_ coe_injective coe_zero coe_add coe_neg coe_sub coe_nsmul coe_zsmul
352+
316353
instance [AddCommGroup Y] : AddCommGroup (locallyFinsuppWithin U Y) :=
317354
Injective.addCommGroup (M₁ := locallyFinsuppWithin U Y) (M₂ := X → Y)
318355
_ coe_injective coe_zero coe_add coe_neg coe_sub coe_nsmul coe_zsmul

0 commit comments

Comments
 (0)