# mathlibdocumentation

topology.uniform_space.abstract_completion

# Abstract theory of Hausdorff completions of uniform spaces

This file characterizes Hausdorff completions of a uniform space α as complete Hausdorff spaces equipped with a map from α which has dense image and induce the original uniform structure on α. Assuming these properties we "extend" uniformly continuous maps from α to complete Hausdorff spaces to the completions of α. This is the universal property expected from a completion. It is then used to extend uniformly continuous maps from α to α' to maps between completions of α and α'.

This file does not construct any such completion, it only study consequences of their existence. The first advantage is that formal properties are clearly highlighted without interference from construction details. The second advantage is that this framework can then be used to compare different completion constructions. See topology/uniform_space/compare_reals for an example. Of course the comparison comes from the universal property as usual.

A general explicit construction of completions is done in uniform_space/completion, leading to a functor from uniform spaces to complete Hausdorff uniform spaces that is left adjoint to the inclusion, see uniform_space/UniformSpace for the category packaging.

## Implementation notes

A tiny technical advantage of using a characteristic predicate such as the properties listed in abstract_completion instead of stating the universal property is that the universal property derived from the predicate is more universe polymorphic.

## References

We don't know any traditional text discussing this. Real world mathematics simply silently identify the results of any two constructions that lead to something one could reasonnably call a completion.

## Tags

uniform spaces, completion, universal property

structure abstract_completion (α : Type u)  :
Type (u+1)
• space : Type ?
• coe : α → c.space
• uniform_struct :
• complete :
• separation :
• uniform_inducing :
• dense :

A completion of α is the data of a complete separated uniform space (from the same universe) and a map from α with dense range and inducing the original uniform structure on α.

theorem abstract_completion.dense_inducing {α : Type u_1} (pkg : abstract_completion α) :

theorem abstract_completion.continuous_coe {α : Type u_1} (pkg : abstract_completion α) :

theorem abstract_completion.induction_on {α : Type u_1} (pkg : abstract_completion α) {p : pkg.space → Prop} (a : pkg.space) :
is_closed {a : pkg.space | p a}(∀ (a : α), p (pkg.coe a))p a

theorem abstract_completion.funext {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} [t2_space β] {f g : pkg.space → β} :
(∀ (a : α), f (pkg.coe a) = g (pkg.coe a))f = g

def abstract_completion.extend {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2}  :
(α → β)pkg.space → β

Extension of maps to completions

Equations
theorem abstract_completion.extend_def {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} {f : α → β} :
pkg.extend f = _.extend f

theorem abstract_completion.extend_coe {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} {f : α → β} [t2_space β] (hf : uniform_continuous f) (a : α) :
pkg.extend f (pkg.coe a) = f a

theorem abstract_completion.uniform_continuous_extend {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} {f : α → β}  :

theorem abstract_completion.continuous_extend {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} {f : α → β}  :

theorem abstract_completion.extend_unique {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} {f : α → β} (hf : uniform_continuous f) {g : pkg.space → β} :
(∀ (a : α), f a = g (pkg.coe a))pkg.extend f = g

@[simp]
theorem abstract_completion.extend_comp_coe {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} {f : pkg.space → β} :
pkg.extend (f pkg.coe) = f

def abstract_completion.map {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) :
(α → β)pkg.space → pkg'.space

Lifting maps to completions

Equations
theorem abstract_completion.uniform_continuous_map {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) (f : α → β) :
uniform_continuous (pkg.map pkg' f)

theorem abstract_completion.continuous_map {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) (f : α → β) :
continuous (pkg.map pkg' f)

@[simp]
theorem abstract_completion.map_coe {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {f : α → β} (hf : uniform_continuous f) (a : α) :
pkg.map pkg' f (pkg.coe a) = pkg'.coe (f a)

theorem abstract_completion.map_unique {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {f : α → β} {g : pkg.space → pkg'.space} :
(∀ (a : α), pkg'.coe (f a) = g (pkg.coe a))pkg.map pkg' f = g

@[simp]
theorem abstract_completion.map_id {α : Type u_1} (pkg : abstract_completion α) :
pkg.map pkg id = id

theorem abstract_completion.extend_map {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} {f : β → γ} {g : α → β} :
pkg'.extend f pkg.map pkg' g = pkg.extend (f g)

theorem abstract_completion.map_comp {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} (pkg'' : abstract_completion γ) {g : β → γ} {f : α → β} :
pkg'.map pkg'' g pkg.map pkg' f = pkg.map pkg'' (g f)

def abstract_completion.compare {α : Type u_1} (pkg pkg' : abstract_completion α) :
pkg.space → pkg'.space

The comparison map between two completions of the same uniform space.

Equations
theorem abstract_completion.compare_coe {α : Type u_1} (pkg pkg' : abstract_completion α) (a : α) :
pkg.compare pkg' (pkg.coe a) = pkg'.coe a

theorem abstract_completion.inverse_compare {α : Type u_1} (pkg pkg' : abstract_completion α) :
pkg.compare pkg' pkg'.compare pkg = id

def abstract_completion.compare_equiv {α : Type u_1} (pkg pkg' : abstract_completion α) :
pkg.space pkg'.space

The bijection between two completions of the same uniform space.

Equations
def abstract_completion.prod {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2}  :
abstract_completion × β)

Products of completions

Equations
def abstract_completion.extend₂ {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3}  :
(α → β → γ)pkg.spacepkg'.space → γ

Extend two variable map to completions.

Equations
theorem abstract_completion.extension₂_coe_coe {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} {f : α → β → γ} (hf : uniform_continuous ) (a : α) (b : β) :
pkg.extend₂ pkg' f (pkg.coe a) (pkg'.coe b) = f a b

theorem abstract_completion.uniform_continuous_extension₂ {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} (f : α → β → γ)  :

def abstract_completion.map₂ {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} (pkg'' : abstract_completion γ) :
(α → β → γ)pkg.spacepkg'.space → pkg''.space

Lift two variable maps to completions.

Equations
theorem abstract_completion.uniform_continuous_map₂ {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} (pkg'' : abstract_completion γ) (f : α → β → γ) :
uniform_continuous₂ (pkg.map₂ pkg' pkg'' f)

theorem abstract_completion.continuous_map₂ {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} (pkg'' : abstract_completion γ) {δ : Type u_4} {f : α → β → γ} {a : δ → pkg.space} {b : δ → pkg'.space} :
continuous (λ (d : δ), pkg.map₂ pkg' pkg'' f (a d) (b d))

theorem abstract_completion.map₂_coe_coe {α : Type u_1} (pkg : abstract_completion α) {β : Type u_2} (pkg' : abstract_completion β) {γ : Type u_3} (pkg'' : abstract_completion γ) (a : α) (b : β) (f : α → β → γ) :
pkg.map₂ pkg' pkg'' f (pkg.coe a) (pkg'.coe b) = pkg''.coe (f a b)