Zulip Chat Archive

Stream: mathlib4

Topic: defining `MulAction.ball`


Lara Toledano (Jan 14 2026 at 12:32):

In #32745 I try to create the file Topology.Algebra.MulActionConst in analogy to Topology.Algebra.ConstMulAction. The motivation is to establish definitions needed to formulate and proove the Effros Theorem, see #mathlib4 > Effros Theorem .

I wish to define

open scoped Pointwise
namespace MulAction
/--
The set `{g β€’ x | g ∈ U}`. Intended to be used for `U ∈ 𝓝 1`. Named in analogy to
`UniformSpace.ball`.
-/
abbrev ball [SMul G X] (x : X) (U : Set G) : Set X := U β€’ {x}

@Yury G. Kudryashov commented

This definition has nothing to do with topology, and should go to a file somewhere in Algebra/. I would discuss it on Zulip.

Consider the map

def r [SMul G X] (s : Set G) : Set (X Γ— X) := {x | x.2 ∈ s β€’ {x.1} }

Given IsTopologicalGroup G and MulAction G X, then we can call UniformSpace.Core.mkOfBasis on r '' (𝓝 1) to define a uniform structure on X. This is the motivation for the analogy between UniformSpace.ball and U β€’ {x}. As UniformSpace.ball is defined in Topology.UniformSpace.Defs and not in Data.Rel, I thought the new file Topology.Algebra.MulActionConst would be a good place to define MulAction.ball, as opposed to somewhere in Algebra\.

Does anyone have a suggestion as to a better home for this definition?

Snir Broshi (Jan 14 2026 at 12:37):

Maybe Mathlib.Algebra.Group.Pointwise.Set.Scalar, next to docs#Set.smul_singleton ?

Snir Broshi (Jan 14 2026 at 12:41):

Also if it's going to be in Algebra I think there should be leftBall and rightBall ({x} β€’ U).
Though "ball" sounds weird here, what metric is this a ball in?

Lara Toledano (Jan 14 2026 at 12:49):

For the name "ball": U β€’ {x}is a ball in the uniform structure I described above, which may not be generated by any one metric but certainly is generated by a family of pseudometrics.

Lara Toledano (Jan 14 2026 at 12:56):

I am not sure what you imagine as the rightBall : given SMul G X, x : X and U : Set G, there is no definition for the expression {x} β€’ U. I you are thinking of SMul G X, x : G and U : Set X, then the notation x β€’ U is already scoped in Pointwise, so that a specific definition would at most serve symmetry.

Snir Broshi (Jan 14 2026 at 13:09):

I was thinking of the symmetry between docs#Set.smul_singleton and docs#Set.singleton_smul.
While the opposite version is the same as x β€’ U without the singleton braces, the definition you suggest also doesn't shorten the notation: ball x U vs U β€’ {x}. I don't understand why U β€’ {x} deserves a named definition but {x} β€’ U = x β€’ U doesn't.

Lara Toledano (Jan 14 2026 at 15:05):

I agree that U β€’ {x} does not necessarily deserve a named definition. I proposed it mainly because I needed a naming convention for the following lemmas

lemma ball_iUnion [SMul G X] (x : X) {ΞΉ : Type*} (U : ΞΉ β†’ Set G) :
    (⋃ i, U i) β€’ {x} = ⋃ i, (U i) β€’ {x} := sorry

lemma ball_iUnionβ‚‚ [SMul G X] (x : X) {ΞΉ : Type*} {ΞΊ : ΞΉ β†’ Sort*} (U : (i : ΞΉ) β†’ ΞΊ i β†’ Set G) :
    (⋃ i, ⋃ j, U i j) β€’ {x} = ⋃ i, ⋃ j, (U i j) β€’ {x} := sorry

lemma ball_mul [Monoid G] [MulAction G X] (x : X) (U V : Set G) :
    ((U * V) β€’ {x} : Set X) = U β€’ (V β€’ {x}) := sorry

lemma ball_smul [Monoid G] [MulAction G X] (x : X) (g : G) (U : Set G) :
    (g β€’ U) β€’ ({x} : Set X) = g β€’ (U β€’ {x}) := sorry

lemma ball_inter [SMul G X] (x : X) (U V : Set G) :
    (U ∩ V) β€’ ({x} : Set X) βŠ† U β€’ {x} ∩ V β€’ {x} := sorry

lemma ball_op_smul [Monoid G] [MulAction G X] (x : X) (g : G) (U : Set G) :
    (U <β€’ g) β€’ ({x} : Set X) = U β€’ {g β€’ x} := sorry

So I guess the true topic of this discussion is not the home for the definition of MulAction.ball, but rather the home and names for these lemmas. The convention that U β€’ {x} should be called "ball" in lemma names could live in a module docstring.

Lara Toledano (Jan 14 2026 at 15:10):

As for the lack of symmetry, I would argue that it is built into the concept of scalar multiplication.

Yury G. Kudryashov (Jan 14 2026 at 15:11):

At least some of these lemmas are true for any set in place of {x}.

Lara Toledano (Jan 14 2026 at 15:26):

That is true, apart from

lemma ball_op_smul [Monoid G] [MulAction G X] (x : X) (g : G) (U : Set G) :
    (U <β€’ g) β€’ ({x} : Set X) = U β€’ {g β€’ x} := sorry

all of the above are true for any set in place of {x}.
I wanted to name these as a convenience issue because the proof of the Effros Theorem will use them so heavily.

Eric Wieser (Jan 14 2026 at 15:33):

That one is true as (U <β€’ g) β€’ S = U β€’ g β€’ S though

Lara Toledano (Jan 16 2026 at 12:41):

Let me motivate my wish for some API around s β€’ {x} given [MulAction G X] (s : Set G) (x : X) more clearly.

A IsTopologicalGroup G instance not only defines a compatible uniform structure on G with a basis indexed by 𝓝 1, it also defines a uniform structure on X with a basis indexed by 𝓝 1, in which {s β€’ {x} | s ∈ 𝓝 1} is a basis for 𝓝 x.

The main statement of the Effros Theorem is that, under the right assumptions, including continuity of fun g : G ↦ g β€’ x for each x : X, the map g ↦ g β€’ x is open. This is equivalent to s β€’ {x} being a neighborhood of x for each s ∈ 𝓝 1 and x : X, which is equivalent to the given topology on X being finer than the topology of the uniform structure defined on X by the given IsTopologicalGroup G and MulAction G X instances.

In other words, this uniform structure induces the coarsest topology on Xsuch that g ↦ g β€’ x is open.

Lara Toledano (Jan 19 2026 at 14:52):

Naming the map x : X ↦ s : Set G ↦ (s β€’ {x} : Set X) would also have the benefit of avoiding situations where the type of {x} is unclear.


Last updated: Feb 28 2026 at 14:05 UTC