# mathlibdocumentation

topology.discrete_quotient

# Discrete quotients of a topological space. #

This file defines the type of discrete quotients of a topological space, denoted discrete_quotient X. To avoid quantifying over types, we model such quotients as setoids whose equivalence classes are clopen.

## Definitions #

1. discrete_quotient X is the type of discrete quotients of X. It is endowed with a coercion to Type, which is defined as the quotient associated to the setoid in question, and each such quotient is endowed with the discrete topology.
2. Given S : discrete_quotient X, the projection X → S is denoted S.proj.
3. When X is compact and S : discrete_quotient X, the space S is endowed with a fintype instance.

## Order structure #

The type discrete_quotient X is endowed with an instance of a semilattice_inf with order_top. The partial ordering A ≤ B mathematically means that B.proj factors through A.proj. The top element ⊤ is the trivial quotient, meaning that every element of X is collapsed to a point. Given h : A ≤ B, the map A → B is discrete_quotient.of_le h. Whenever X is discrete, the type discrete_quotient X is also endowed with an instance of a semilattice_inf with order_bot, where the bot element ⊥ is X itself.

Given f : X → Y and h : continuous f, we define a predicate le_comap h A B for A : discrete_quotient X and B : discrete_quotient Y, asserting that f descends to A → B. If cond : le_comap h A B, the function A → B is obtained by discrete_quotient.map cond.

## Theorems #

The two main results proved in this file are:

1. discrete_quotient.eq_of_proj_eq which states that when X is compact, t2 and totally disconnected, any two elements of X agree if their projections in Q agree for all Q : discrete_quotient X.
2. discrete_quotient.exists_of_compat which states that when X is compact, then any system of elements of Q as Q : discrete_quotient X varies, which is compatible with respect to discrete_quotient.of_le, must arise from some element of X.

## Remarks #

The constructions in this file will be used to show that any profinite space is a limit of finite discrete spaces.

@[ext]
structure discrete_quotient (X : Type u_1)  :
Type u_1

The type of discrete quotients of a topological space.

theorem discrete_quotient.ext_iff {X : Type u_1} {_inst_1 : topological_space X} (x y : discrete_quotient X) :
x = y x.rel = y.rel
theorem discrete_quotient.ext {X : Type u_1} {_inst_1 : topological_space X} (x y : discrete_quotient X) (h : x.rel = y.rel) :
x = y
def discrete_quotient.of_clopen {X : Type u_1} {A : set X} (h : is_clopen A) :

Construct a discrete quotient from a clopen set.

Equations
theorem discrete_quotient.refl {X : Type u_1} (S : discrete_quotient X) (x : X) :
S.rel x x
theorem discrete_quotient.symm {X : Type u_1} (S : discrete_quotient X) (x y : X) :
S.rel x yS.rel y x
theorem discrete_quotient.trans {X : Type u_1} (S : discrete_quotient X) (x y z : X) :
S.rel x yS.rel y zS.rel x z
def discrete_quotient.setoid {X : Type u_1} (S : discrete_quotient X) :

The setoid whose quotient yields the discrete quotient.

Equations
@[protected, instance]
def discrete_quotient.has_coe_to_sort {X : Type u_1}  :
(Type u_1)
Equations
@[protected, instance]
Equations
def discrete_quotient.proj {X : Type u_1} (S : discrete_quotient X) :
X → S

The projection from X to the given discrete quotient.

Equations
theorem discrete_quotient.proj_surjective {X : Type u_1} (S : discrete_quotient X) :
theorem discrete_quotient.fiber_eq {X : Type u_1} (S : discrete_quotient X) (x : X) :
S.proj ⁻¹' {S.proj x} = set_of (S.rel x)
theorem discrete_quotient.proj_continuous {X : Type u_1} (S : discrete_quotient X) :
theorem discrete_quotient.fiber_closed {X : Type u_1} (S : discrete_quotient X) (A : set S) :
theorem discrete_quotient.fiber_open {X : Type u_1} (S : discrete_quotient X) (A : set S) :
theorem discrete_quotient.fiber_clopen {X : Type u_1} (S : discrete_quotient X) (A : set S) :
@[protected, instance]
def discrete_quotient.partial_order {X : Type u_1}  :
Equations
@[protected, instance]
def discrete_quotient.order_top {X : Type u_1}  :
Equations
@[protected, instance]
def discrete_quotient.semilattice_inf {X : Type u_1}  :
Equations
@[protected, instance]
def discrete_quotient.inhabited {X : Type u_1}  :
Equations
def discrete_quotient.comap {X : Type u_1} (S : discrete_quotient X) {Y : Type u_2} {f : Y → X} (cont : continuous f) :

Comap a discrete quotient along a continuous map.

Equations
@[simp]
theorem discrete_quotient.comap_id {X : Type u_1} (S : discrete_quotient X) :
@[simp]
theorem discrete_quotient.comap_comp {X : Type u_1} (S : discrete_quotient X) {Y : Type u_2} {f : Y → X} (cont : continuous f) {Z : Type u_3} {g : Z → Y} (cont' : continuous g) :
S.comap _ = (S.comap cont).comap cont'
theorem discrete_quotient.comap_mono {X : Type u_1} {Y : Type u_2} {f : Y → X} (cont : continuous f) {A B : discrete_quotient X} (h : A B) :
A.comap cont B.comap cont
def discrete_quotient.of_le {X : Type u_1} {A B : discrete_quotient X} (h : A B) :
A → B

The map induced by a refinement of a discrete quotient.

Equations
• = λ (a : A), (λ (x : X), B.proj x) _
@[simp]
theorem discrete_quotient.of_le_refl {X : Type u_1} {A : discrete_quotient X} :
theorem discrete_quotient.of_le_refl_apply {X : Type u_1} {A : discrete_quotient X} (a : A) :
@[simp]
theorem discrete_quotient.of_le_comp {X : Type u_1} {A B C : discrete_quotient X} (h1 : A B) (h2 : B C) :
theorem discrete_quotient.of_le_comp_apply {X : Type u_1} {A B C : discrete_quotient X} (h1 : A B) (h2 : B C) (a : A) :
theorem discrete_quotient.of_le_continuous {X : Type u_1} {A B : discrete_quotient X} (h : A B) :
@[simp]
theorem discrete_quotient.of_le_proj {X : Type u_1} {A B : discrete_quotient X} (h : A B) :
@[simp]
theorem discrete_quotient.of_le_proj_apply {X : Type u_1} {A B : discrete_quotient X} (h : A B) (x : X) :
(A.proj x) = B.proj x
@[protected, instance]
def discrete_quotient.order_bot {X : Type u_1}  :

When X is discrete, there is a order_bot instance on discrete_quotient X

Equations
theorem discrete_quotient.proj_bot_injective {X : Type u_1}  :
theorem discrete_quotient.proj_bot_bijective {X : Type u_1}  :
def discrete_quotient.le_comap {X : Type u_1} {Y : Type u_2} {f : Y → X} (cont : continuous f) (A : discrete_quotient Y) (B : discrete_quotient X) :
Prop

Given cont : continuous f, le_comap cont A B is defined as A ≤ B.comap f. Mathematically this means that f descends to a morphism A → B.

Equations
theorem discrete_quotient.le_comap_id {X : Type u_1} (A : discrete_quotient X) :
theorem discrete_quotient.le_comap_comp {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} {Z : Type u_3} {g : Z → Y} {cont' : continuous g} {C : discrete_quotient Z} :
C A B
theorem discrete_quotient.le_comap_trans {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B C : discrete_quotient X} :
BB C C
def discrete_quotient.map {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} (cond : B) :
A → B

Map a discrete quotient along a continuous map.

Equations
• = cond
theorem discrete_quotient.map_continuous {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} (cond : B) :
@[simp]
theorem discrete_quotient.map_proj {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} (cond : B) :
A.proj = B.proj f
@[simp]
theorem discrete_quotient.map_proj_apply {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} (cond : B) (y : Y) :
(A.proj y) = B.proj (f y)
@[simp]
theorem discrete_quotient.map_id {Y : Type u_2} {A : discrete_quotient Y} :
@[simp]
theorem discrete_quotient.map_comp {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} {Z : Type u_3} {g : Z → Y} {cont' : continuous g} {C : discrete_quotient Z} (h1 : C A) (h2 : B) :
@[simp]
theorem discrete_quotient.of_le_map {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B C : discrete_quotient X} (cond : B) (h : B C) :
@[simp]
theorem discrete_quotient.of_le_map_apply {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B C : discrete_quotient X} (cond : B) (h : B C) (a : A) :
@[simp]
theorem discrete_quotient.map_of_le {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} {C : discrete_quotient Y} (cond : B) (h : C A) :
@[simp]
theorem discrete_quotient.map_of_le_apply {X : Type u_1} {Y : Type u_2} {f : Y → X} {cont : continuous f} {A : discrete_quotient Y} {B : discrete_quotient X} {C : discrete_quotient Y} (cond : B) (h : C A) (c : C) :
theorem discrete_quotient.eq_of_proj_eq {X : Type u_1} [t2_space X] [disc : totally_disconnected_space X] {x y : X} :
(∀ (Q : , Q.proj x = Q.proj y)x = y
theorem discrete_quotient.fiber_le_of_le {X : Type u_1} {A B : discrete_quotient X} (h : A B) (a : A) :
theorem discrete_quotient.exists_of_compat {X : Type u_1} (Qs : Π (Q : , Q) (compat : ∀ (A B : (h : A B), (Qs A) = Qs B) :
∃ (x : X), ∀ (Q : , Q.proj x = Qs Q
@[protected, instance]
noncomputable def discrete_quotient.fintype {X : Type u_1} (S : discrete_quotient X)  :
Equations
def locally_constant.discrete_quotient {X : Type u_1} {α : Type u_2} (f : α) :

Any locally constant function induces a discrete quotient.

Equations
def locally_constant.lift {X : Type u_1} {α : Type u_2} (f : α) :

The function from the discrete quotient associated to a locally constant function.

Equations
theorem locally_constant.lift_is_locally_constant {X : Type u_1} {α : Type u_2} (f : α) :
def locally_constant.locally_constant_lift {X : Type u_1} {α : Type u_2} (f : α) :

A locally constant version of locally_constant.lift.

Equations
@[simp]
theorem locally_constant.lift_eq_coe {X : Type u_1} {α : Type u_2} (f : α) :
@[simp]
theorem locally_constant.factors {X : Type u_1} {α : Type u_2} (f : α) :