Zulip Chat Archive
Stream: Is there code for X?
Topic: Completion of a complete space
Xavier Roblot (Sep 23 2022 at 13:57):
I was not able to find the following in mathlib
. Is it missing? It's true that the proof is quite straightforward but I think it could be useful to have.
import topology.uniform_space.abstract_completion
noncomputable def abstract_completion.complete_equiv_self {α : Type*} [uniform_space α]
[separated_space α] [complete_space α] (pkg : abstract_completion α) :
pkg.space ≃ α :=
abstract_completion.compare_equiv pkg (abstract_completion.mk α id
(by apply_instance) (by apply_instance) (by apply_instance) uniform_inducing_id
(function.surjective.dense_range function.surjective_id))
Riccardo Brasca (Sep 23 2022 at 14:02):
Are you sure you want to use docs#abstract_completion instead of docs#uniform_space.completion?
Riccardo Brasca (Sep 23 2022 at 14:04):
Hmm, I don't see the theorem even for "the" completion
Junyan Xu (Sep 23 2022 at 14:06):
Why is docs#abstract_completion.compare_equiv not a docs#uniform_equiv?
Riccardo Brasca (Sep 23 2022 at 14:07):
Probably because we forgot to do so
Riccardo Brasca (Sep 23 2022 at 14:10):
Indeed what we want is, for a complete space α
, an element of abstract_completion α
, given by α
itself.
Xavier Roblot (Sep 23 2022 at 14:17):
Riccardo Brasca said:
Are you sure you want to use docs#abstract_completion instead of docs#uniform_space.completion?
I thought that if the result holds for abstract_completion
then we can deduce the same for any completion, so the equivalent statement for uniform_completion
should follow.
Riccardo Brasca (Sep 23 2022 at 14:19):
Sure, I just thought maybe the result was already there for uniform_completion
, but I don't see it.
Anatole Dedecker (Sep 23 2022 at 14:23):
Junyan Xu said:
Why is docs#abstract_completion.compare_equiv not a docs#uniform_equiv?
Because it docs#uniform_equiv didn't exist until a few months ago
Xavier Roblot (Sep 23 2022 at 14:24):
import topology.uniform_space.completion
noncomputable def abstract_completion.complete_equiv_self {α : Type*} [uniform_space α]
[separated_space α] [complete_space α] (pkg : abstract_completion α) :
pkg.space ≃ α :=
abstract_completion.compare_equiv pkg (abstract_completion.mk α id
(by apply_instance) (by apply_instance) (by apply_instance) uniform_inducing_id
(function.surjective.dense_range function.surjective_id))
noncomputable def uniform_completion.complete_equiv_self {α : Type*} [uniform_space α]
[complete_space α] [separated_space α]:
uniform_space.completion α ≃ α :=
abstract_completion.complete_equiv_self uniform_space.completion.cpkg
Xavier Roblot (Sep 23 2022 at 14:25):
Should I just PR those results?
Oh, I see maybe I should prove those with uniform_equiv
first, I guess.
Anatole Dedecker (Sep 23 2022 at 14:27):
I'd say what should be in mathlib is:
- docs#abstract_completion.compare_equiv upgraded to a docs#uniform_equiv
- a complete space is a docs#abstract_completion of itself
Riccardo Brasca (Sep 23 2022 at 14:27):
Maybe we want inhabitated (abstract_completion α)
, but I am not sure
Anatole Dedecker (Sep 23 2022 at 14:28):
Riccardo Brasca said:
Maybe we want
inhabitated (abstract_completion α)
, but I am not sure
No because we want the one with pkg.space = \alpha
I think
Riccardo Brasca (Sep 23 2022 at 14:32):
This is why I said inhabitated
and not nonempty
, but I don't really care
Riccardo Brasca (Sep 23 2022 at 14:33):
In any case we want to say that α
is an abstract completion of α
Xavier Roblot (Sep 23 2022 at 14:39):
Upgrading docs#abstract_completion.compare_equiv upgraded to a docs#uniform_equiv is fairly easy:
import topology.uniform_space.equiv
import topology.uniform_space.completion
open abstract_completion
noncomputable theory
variables {α : Type*} [uniform_space α] (pkg : abstract_completion α)
variables (pkg' : abstract_completion α)
instance : uniform_space pkg.space := pkg.uniform_struct
/-- The bijection between two completions of the same uniform space. -/
def abstract_completion.compare_equiv0 : pkg.space ≃ᵤ pkg'.space :=
{ to_fun := pkg.compare pkg',
inv_fun := pkg'.compare pkg,
left_inv := congr_fun (pkg'.inverse_compare pkg),
right_inv := congr_fun (pkg.inverse_compare pkg'),
uniform_continuous_to_fun := uniform_continuous_compare _ _,
uniform_continuous_inv_fun := uniform_continuous_compare _ _ }
Xavier Roblot (Sep 23 2022 at 14:41):
Although I needed to make an instance
to say that pkg.space
is a uniform_space
to be able to state the result. I don't know if there is another way to do that without using an instance
...
Xavier Roblot (Sep 23 2022 at 14:43):
I do not know enough about inhabited
to answer to that...
Riccardo Brasca said:
Maybe we want
inhabitated (abstract_completion α)
, but I am not sure
Riccardo Brasca (Sep 23 2022 at 14:49):
inhabited X
just means that there is an element of X
, in some sense "canonical". In practice you can obtain this fixed element via p.default
if p : inhabited X
Riccardo Brasca (Sep 23 2022 at 14:50):
but really, this is not really important, once you have the element it's more or less the same
Junyan Xu (Sep 23 2022 at 16:45):
The instance was already registered locally via
local attribute [instance]
abstract_completion.uniform_struct
So if you add abstract_completion.compare_equiv0
to the same file (same section, actually) it would just work. (Notice that it's also impossible to state uniform_continuous_compare
without the instance.)
Xavier Roblot (Sep 23 2022 at 19:40):
I opened a PR with the results #16612
Last updated: Dec 20 2023 at 11:08 UTC