topology.uniform_space.uniform_embedding
⟷
Mathlib.Topology.UniformSpace.UniformEmbedding
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mk_iff
to uniform_inducing
and uniform_embedding
.uniform_inducing
up.uniform_inducing.comap_uniform_space
, uniform_inducing_iff'
, and filter.has_basis.uniform_inducing_iff
.uniform_embedding_iff'
, filter.has_basis.uniform_embedding_iff'
, and filter.has_basis.uniform_embedding_iff
.uniform_embedding_def
and uniform_embedding_def'
.uniform_embedding_iff_uniform_inducing
.rescale_to_shell_semi_normed_zpow
and rescale_to_shell_zpow
.continuous_linear_map.antilipschitz_of_uniform_embedding
to continuous_linear_map.antilipschitz_of_embedding
, add an even more general version linear_map.antilipschitz_of_comap_nhds_le
.fully_applied := ff
to generate equiv.prod_congr_apply
.edist := λ _ _, 0
in metric_space
instances for empty
and punit
.inducing.injective
, inducing.embedding
, and embedding_iff_inducing
Sort*
s in filter.has_basis.uniform_continuous_iff
and filter.has_basis.uniform_continuous_on_iff
.metric.of_t0_pseudo_metric_space
to metric_space.of_t0_pseudo_metric_space
;emetric.of_t0_pseudo_emetric_space
to emetric_space.of_t0_pseudo_emetric_space
;metric.metric_space.to_emetric_space
to metric_space.to_emetric_space
;uniform_embedding_iff'
to emetric.uniform_embedding_iff'
@@ -16,7 +16,7 @@ import topology.dense_embedding
Extension of uniform continuous functions.
-/
-open filter topological_space set classical
+open filter topological_space set function classical
open_locale classical uniformity topology filter
section
@@ -24,12 +24,33 @@ variables {α : Type*} {β : Type*} {γ : Type*}
[uniform_space α] [uniform_space β] [uniform_space γ]
universes u v
+/-!
+### Uniform inducing maps
+-/
+
/-- A map `f : α → β` between uniform spaces is called *uniform inducing* if the uniformity filter
on `α` is the pullback of the uniformity filter on `β` under `prod.map f f`. If `α` is a separated
space, then this implies that `f` is injective, hence it is a `uniform_embedding`. -/
+@[mk_iff]
structure uniform_inducing (f : α → β) : Prop :=
(comap_uniformity : comap (λx:α×α, (f x.1, f x.2)) (𝓤 β) = 𝓤 α)
+protected lemma uniform_inducing.comap_uniform_space {f : α → β} (hf : uniform_inducing f) :
+ ‹uniform_space β›.comap f = ‹uniform_space α› :=
+uniform_space_eq hf.1
+
+lemma uniform_inducing_iff' {f : α → β} :
+ uniform_inducing f ↔ uniform_continuous f ∧ comap (prod.map f f) (𝓤 β) ≤ 𝓤 α :=
+by rw [uniform_inducing_iff, uniform_continuous, tendsto_iff_comap, le_antisymm_iff, and_comm]; refl
+
+protected lemma filter.has_basis.uniform_inducing_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).has_basis p s) (h' : (𝓤 β).has_basis p' s') {f : α → β} :
+ uniform_inducing f ↔
+ (∀ i, p' i → ∃ j, p j ∧ ∀ x y, (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
+ (∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j) :=
+by simp [uniform_inducing_iff', h.uniform_continuous_iff h', (h'.comap _).le_basis_iff h,
+ subset_def]
+
lemma uniform_inducing.mk' {f : α → β} (h : ∀ s, s ∈ 𝓤 α ↔
∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s) : uniform_inducing f :=
⟨by simp [eq_comm, filter.ext_iff, subset_def, h]⟩
@@ -39,9 +60,7 @@ lemma uniform_inducing_id : uniform_inducing (@id α) :=
lemma uniform_inducing.comp {g : β → γ} (hg : uniform_inducing g)
{f : α → β} (hf : uniform_inducing f) : uniform_inducing (g ∘ f) :=
-⟨ by rw [show (λ (x : α × α), ((g ∘ f) x.1, (g ∘ f) x.2)) =
- (λ y : β × β, (g y.1, g y.2)) ∘ (λ x : α × α, (f x.1, f x.2)), by ext ; simp,
- ← filter.comap_comap, hg.1, hf.1]⟩
+⟨by rw [← hf.1, ← hg.1, comap_comap]⟩
lemma uniform_inducing.basis_uniformity {f : α → β} (hf : uniform_inducing f)
{ι : Sort*} {p : ι → Prop} {s : ι → set (β × β)} (H : (𝓤 β).has_basis p s) :
@@ -61,11 +80,60 @@ begin
exact comap_mono hg.le_comap
end
+lemma uniform_inducing.uniform_continuous {f : α → β}
+ (hf : uniform_inducing f) : uniform_continuous f :=
+(uniform_inducing_iff'.1 hf).1
+
+lemma uniform_inducing.uniform_continuous_iff {f : α → β} {g : β → γ} (hg : uniform_inducing g) :
+ uniform_continuous f ↔ uniform_continuous (g ∘ f) :=
+by { dsimp only [uniform_continuous, tendsto],
+ rw [← hg.comap_uniformity, ← map_le_iff_le_comap, filter.map_map] }
+
+protected lemma uniform_inducing.inducing {f : α → β} (h : uniform_inducing f) : inducing f :=
+begin
+ unfreezingI { obtain rfl := h.comap_uniform_space },
+ letI := uniform_space.comap f _,
+ exact ⟨rfl⟩
+end
+
+lemma uniform_inducing.prod {α' : Type*} {β' : Type*} [uniform_space α'] [uniform_space β']
+ {e₁ : α → α'} {e₂ : β → β'} (h₁ : uniform_inducing e₁) (h₂ : uniform_inducing e₂) :
+ uniform_inducing (λp:α×β, (e₁ p.1, e₂ p.2)) :=
+⟨by simp [(∘), uniformity_prod, h₁.comap_uniformity.symm, h₂.comap_uniformity.symm,
+ comap_inf, comap_comap]⟩
+
+lemma uniform_inducing.dense_inducing {f : α → β} (h : uniform_inducing f) (hd : dense_range f) :
+ dense_inducing f :=
+{ dense := hd,
+ induced := h.inducing.induced }
+
+protected lemma uniform_inducing.injective [t0_space α] {f : α → β} (h : uniform_inducing f) :
+ injective f :=
+h.inducing.injective
+
/-- A map `f : α → β` between uniform spaces is a *uniform embedding* if it is uniform inducing and
injective. If `α` is a separated space, then the latter assumption follows from the former. -/
+@[mk_iff]
structure uniform_embedding (f : α → β) extends uniform_inducing f : Prop :=
(inj : function.injective f)
+theorem uniform_embedding_iff' {f : α → β} :
+ uniform_embedding f ↔ injective f ∧ uniform_continuous f ∧ comap (prod.map f f) (𝓤 β) ≤ 𝓤 α :=
+by rw [uniform_embedding_iff, and_comm, uniform_inducing_iff']
+
+theorem filter.has_basis.uniform_embedding_iff' {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).has_basis p s) (h' : (𝓤 β).has_basis p' s') {f : α → β} :
+ uniform_embedding f ↔ injective f ∧
+ (∀ i, p' i → ∃ j, p j ∧ ∀ x y, (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
+ (∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j) :=
+by rw [uniform_embedding_iff, and_comm, h.uniform_inducing_iff h']
+
+theorem filter.has_basis.uniform_embedding_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).has_basis p s) (h' : (𝓤 β).has_basis p' s') {f : α → β} :
+ uniform_embedding f ↔ injective f ∧ uniform_continuous f ∧
+ (∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j) :=
+by simp only [h.uniform_embedding_iff' h', h.uniform_continuous_iff h', exists_prop]
+
lemma uniform_embedding_subtype_val {p : α → Prop} :
uniform_embedding (subtype.val : subtype p → α) :=
{ comap_uniformity := rfl,
@@ -86,79 +154,38 @@ lemma uniform_embedding.comp {g : β → γ} (hg : uniform_embedding g)
{ inj := hg.inj.comp hf.inj,
..hg.to_uniform_inducing.comp hf.to_uniform_inducing }
-theorem uniform_embedding_def {f : α → β} :
- uniform_embedding f ↔ function.injective f ∧ ∀ s, s ∈ 𝓤 α ↔
- ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s :=
-begin
- split,
- { rintro ⟨⟨h⟩, h'⟩,
- rw [eq_comm, filter.ext_iff] at h,
- simp [*, subset_def] },
- { rintro ⟨h, h'⟩,
- refine uniform_embedding.mk ⟨_⟩ h,
- rw [eq_comm, filter.ext_iff],
- simp [*, subset_def] }
-end
-
-theorem uniform_embedding_def' {f : α → β} :
- uniform_embedding f ↔ function.injective f ∧ uniform_continuous f ∧
- ∀ s, s ∈ 𝓤 α →
- ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s :=
-by simp only [uniform_embedding_def, uniform_continuous_def]; exact
-⟨λ ⟨I, H⟩, ⟨I, λ s su, (H _).2 ⟨s, su, λ x y, id⟩, λ s, (H s).1⟩,
- λ ⟨I, H₁, H₂⟩, ⟨I, λ s, ⟨H₂ s,
- λ ⟨t, tu, h⟩, mem_of_superset (H₁ t tu) (λ ⟨a, b⟩, h a b)⟩⟩⟩
-
lemma equiv.uniform_embedding {α β : Type*} [uniform_space α] [uniform_space β] (f : α ≃ β)
(h₁ : uniform_continuous f) (h₂ : uniform_continuous f.symm) : uniform_embedding f :=
-{ comap_uniformity :=
- begin
- refine le_antisymm _ _,
- { change comap (f.prod_congr f) _ ≤ _,
- rw ← map_equiv_symm (f.prod_congr f),
- exact h₂ },
- { rw ← map_le_iff_le_comap,
- exact h₁ }
- end,
- inj := f.injective }
+uniform_embedding_iff'.2 ⟨f.injective, h₁, by rwa [← equiv.prod_congr_apply, ← map_equiv_symm]⟩
theorem uniform_embedding_inl : uniform_embedding (sum.inl : α → α ⊕ β) :=
begin
- apply uniform_embedding_def.2 ⟨sum.inl_injective, λ s, ⟨_, _⟩⟩,
- { assume hs,
- refine ⟨(λ p : α × α, (sum.inl p.1, sum.inl p.2)) '' s ∪
- (λ p : β × β, (sum.inr p.1, sum.inr p.2)) '' univ, _, _⟩,
- { exact union_mem_uniformity_sum hs univ_mem },
- { simp } },
- { rintros ⟨t, ht, h't⟩,
- simp only [sum.uniformity, mem_sup, mem_map] at ht,
- apply filter.mem_of_superset ht.1,
- rintros ⟨x, y⟩ hx,
- exact h't _ _ hx }
+ refine ⟨⟨_⟩, sum.inl_injective⟩,
+ rw [sum.uniformity, comap_sup, comap_map, comap_eq_bot_iff_compl_range.2 _, sup_bot_eq],
+ { refine mem_map.2 (univ_mem' _),
+ simp },
+ { exact sum.inl_injective.prod_map sum.inl_injective }
end
theorem uniform_embedding_inr : uniform_embedding (sum.inr : β → α ⊕ β) :=
begin
- apply uniform_embedding_def.2 ⟨sum.inr_injective, λ s, ⟨_, _⟩⟩,
- { assume hs,
- refine ⟨(λ p : α × α, (sum.inl p.1, sum.inl p.2)) '' univ ∪
- (λ p : β × β, (sum.inr p.1, sum.inr p.2)) '' s, _, _⟩,
- { exact union_mem_uniformity_sum univ_mem hs },
- { simp } },
- { rintros ⟨t, ht, h't⟩,
- simp only [sum.uniformity, mem_sup, mem_map] at ht,
- apply filter.mem_of_superset ht.2,
- rintros ⟨x, y⟩ hx,
- exact h't _ _ hx }
+ refine ⟨⟨_⟩, sum.inr_injective⟩,
+ rw [sum.uniformity, comap_sup, comap_eq_bot_iff_compl_range.2 _, comap_map, bot_sup_eq],
+ { exact sum.inr_injective.prod_map sum.inr_injective },
+ { refine mem_map.2 (univ_mem' _),
+ simp },
end
/-- If the domain of a `uniform_inducing` map `f` is a `separated_space`, then `f` is injective,
hence it is a `uniform_embedding`. -/
-protected theorem uniform_inducing.uniform_embedding [separated_space α] {f : α → β}
+protected theorem uniform_inducing.uniform_embedding [t0_space α] {f : α → β}
(hf : uniform_inducing f) :
uniform_embedding f :=
-⟨hf, λ x y h, eq_of_uniformity_basis (hf.basis_uniformity (𝓤 β).basis_sets) $
- λ s hs, mem_preimage.2 $ mem_uniformity_of_eq hs h⟩
+⟨hf, hf.injective⟩
+
+theorem uniform_embedding_iff_uniform_inducing [t0_space α] {f : α → β} :
+ uniform_embedding f ↔ uniform_inducing f :=
+⟨uniform_embedding.to_uniform_inducing, uniform_inducing.uniform_embedding⟩
/-- If a map `f : α → β` sends any two distinct points to point that are **not** related by a fixed
`s ∈ 𝓤 β`, then `f` is uniform inducing with respect to the discrete uniformity on `α`:
@@ -186,35 +213,7 @@ begin
exact uniform_inducing.uniform_embedding ⟨comap_uniformity_of_spaced_out hs hf⟩
end
-lemma uniform_inducing.uniform_continuous {f : α → β}
- (hf : uniform_inducing f) : uniform_continuous f :=
-by simp [uniform_continuous, hf.comap_uniformity.symm, tendsto_comap]
-
-lemma uniform_inducing.uniform_continuous_iff {f : α → β} {g : β → γ} (hg : uniform_inducing g) :
- uniform_continuous f ↔ uniform_continuous (g ∘ f) :=
-by { dsimp only [uniform_continuous, tendsto],
- rw [← hg.comap_uniformity, ← map_le_iff_le_comap, filter.map_map] }
-
-lemma uniform_inducing.inducing {f : α → β} (h : uniform_inducing f) : inducing f :=
-begin
- refine ⟨eq_of_nhds_eq_nhds $ assume a, _ ⟩,
- rw [nhds_induced, nhds_eq_uniformity, nhds_eq_uniformity, ← h.comap_uniformity,
- comap_lift'_eq, comap_lift'_eq2],
- exacts [rfl, monotone_preimage]
-end
-
-lemma uniform_inducing.prod {α' : Type*} {β' : Type*} [uniform_space α'] [uniform_space β']
- {e₁ : α → α'} {e₂ : β → β'} (h₁ : uniform_inducing e₁) (h₂ : uniform_inducing e₂) :
- uniform_inducing (λp:α×β, (e₁ p.1, e₂ p.2)) :=
-⟨by simp [(∘), uniformity_prod, h₁.comap_uniformity.symm, h₂.comap_uniformity.symm,
- comap_inf, comap_comap]⟩
-
-lemma uniform_inducing.dense_inducing {f : α → β} (h : uniform_inducing f) (hd : dense_range f) :
- dense_inducing f :=
-{ dense := hd,
- induced := h.inducing.induced }
-
-lemma uniform_embedding.embedding {f : α → β} (h : uniform_embedding f) : embedding f :=
+protected lemma uniform_embedding.embedding {f : α → β} (h : uniform_embedding f) : embedding f :=
{ induced := h.to_uniform_inducing.inducing.induced,
inj := h.inj }
@@ -237,7 +236,7 @@ end
lemma closure_image_mem_nhds_of_uniform_inducing
{s : set (α×α)} {e : α → β} (b : β)
(he₁ : uniform_inducing e) (he₂ : dense_inducing e) (hs : s ∈ 𝓤 α) :
- ∃a, closure (e '' {a' | (a, a') ∈ s}) ∈ 𝓝 b :=
+ ∃ a, closure (e '' {a' | (a, a') ∈ s}) ∈ 𝓝 b :=
have s ∈ comap (λp:α×α, (e p.1, e p.2)) (𝓤 β),
from he₁.comap_uniformity.symm ▸ hs,
let ⟨t₁, ht₁u, ht₁⟩ := this in
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -54,7 +54,7 @@ protected theorem UniformInducing.comap_uniformSpace {f : α → β} (hf : Unifo
#print uniformInducing_iff' /-
theorem uniformInducing_iff' {f : α → β} :
UniformInducing f ↔ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
- rw [uniformInducing_iff, UniformContinuous, tendsto_iff_comap, le_antisymm_iff, and_comm'] <;> rfl
+ rw [uniformInducing_iff, UniformContinuous, tendsto_iff_comap, le_antisymm_iff, and_comm] <;> rfl
#align uniform_inducing_iff' uniformInducing_iff'
-/
@@ -177,7 +177,7 @@ structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop wher
#print uniformEmbedding_iff' /-
theorem uniformEmbedding_iff' {f : α → β} :
UniformEmbedding f ↔ Injective f ∧ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
- rw [uniformEmbedding_iff, and_comm', uniformInducing_iff']
+ rw [uniformEmbedding_iff, and_comm, uniformInducing_iff']
#align uniform_embedding_iff' uniformEmbedding_iff'
-/
@@ -188,7 +188,7 @@ theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' :
Injective f ∧
(∀ i, p' i → ∃ j, p j ∧ ∀ x y, (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j :=
- by rw [uniformEmbedding_iff, and_comm', h.uniform_inducing_iff h']
+ by rw [uniformEmbedding_iff, and_comm, h.uniform_inducing_iff h']
#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -330,7 +330,7 @@ theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopolo
rcases DiscreteTopology.eq_bot α with rfl; letI : UniformSpace α := ⊥
exact
{ (uniformEmbedding_of_spaced_out hs hf).Embedding with
- closed_range := isClosed_range_of_spaced_out hs hf }
+ isClosed_range := isClosed_range_of_spaced_out hs hf }
#align closed_embedding_of_spaced_out closedEmbedding_of_spaced_out
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -302,7 +302,7 @@ theorem uniformEmbedding_of_spaced_out {α} {f : α → β} {s : Set (β × β)}
(hf : Pairwise fun x y => (f x, f y) ∉ s) : @UniformEmbedding α β ⊥ ‹_› f :=
by
letI : UniformSpace α := ⊥; haveI := discreteTopology_bot α
- haveI : SeparatedSpace α := separated_iff_t2.2 inferInstance
+ haveI : T0Space α := R1Space.t2Space_iff_t0Space.2 inferInstance
exact UniformInducing.uniformEmbedding ⟨comap_uniformity_of_spaced_out hs hf⟩
#align uniform_embedding_of_spaced_out uniformEmbedding_of_spaced_out
-/
@@ -324,10 +324,9 @@ theorem UniformEmbedding.denseEmbedding {f : α → β} (h : UniformEmbedding f)
-/
#print closedEmbedding_of_spaced_out /-
-theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopology α]
- [SeparatedSpace β] {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
- (hf : Pairwise fun x y => (f x, f y) ∉ s) : ClosedEmbedding f :=
- by
+theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopology α] [T0Space β]
+ {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β) (hf : Pairwise fun x y => (f x, f y) ∉ s) :
+ ClosedEmbedding f := by
rcases DiscreteTopology.eq_bot α with rfl; letI : UniformSpace α := ⊥
exact
{ (uniformEmbedding_of_spaced_out hs hf).Embedding with
@@ -394,10 +393,10 @@ theorem isComplete_of_complete_image {m : α → β} {s : Set α} (hm : UniformI
(hs : IsComplete (m '' s)) : IsComplete s :=
by
intro f hf hfs
- rw [le_principal_iff] at hfs
+ rw [le_principal_iff] at hfs
obtain ⟨_, ⟨x, hx, rfl⟩, hyf⟩ : ∃ y ∈ m '' s, map m f ≤ 𝓝 y
exact hs (f.map m) (hf.map hm.uniform_continuous) (le_principal_iff.2 (image_mem_map hfs))
- rw [map_le_iff_le_comap, ← nhds_induced, ← hm.inducing.induced] at hyf
+ rw [map_le_iff_le_comap, ← nhds_induced, ← hm.inducing.induced] at hyf
exact ⟨x, hx, hyf⟩
#align is_complete_of_complete_image isComplete_of_complete_image
-/
@@ -417,14 +416,14 @@ theorem isComplete_image_iff {m : α → β} {s : Set α} (hm : UniformInducing
refine' ⟨isComplete_of_complete_image hm, fun c => _⟩
haveI : CompleteSpace s := c.complete_space_coe
set m' : s → β := m ∘ coe
- suffices IsComplete (range m') by rwa [range_comp, Subtype.range_coe] at this
+ suffices IsComplete (range m') by rwa [range_comp, Subtype.range_coe] at this
have hm' : UniformInducing m' := hm.comp uniform_embedding_subtype_coe.to_uniform_inducing
intro f hf hfm
- rw [Filter.le_principal_iff] at hfm
+ rw [Filter.le_principal_iff] at hfm
have cf' : Cauchy (comap m' f) :=
hf.comap' hm'.comap_uniformity.le (ne_bot.comap_of_range_mem hf.1 hfm)
rcases CompleteSpace.complete cf' with ⟨x, hx⟩
- rw [hm'.inducing.nhds_eq_comap, comap_le_comap_iff hfm] at hx
+ rw [hm'.inducing.nhds_eq_comap, comap_le_comap_iff hfm] at hx
use m' x, mem_range_self _, hx
#align is_complete_image_iff isComplete_image_iff
-/
@@ -532,7 +531,7 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
theorem totallyBounded_preimage {f : α → β} {s : Set β} (hf : UniformEmbedding f)
(hs : TotallyBounded s) : TotallyBounded (f ⁻¹' s) := fun t ht =>
by
- rw [← hf.comap_uniformity] at ht
+ rw [← hf.comap_uniformity] at ht
rcases mem_comap.2 ht with ⟨t', ht', ts⟩
rcases totallyBounded_iff_subset.1 (totallyBounded_subset (image_preimage_subset f s) hs) _
ht' with
@@ -616,10 +615,10 @@ theorem uniform_extend_subtype [CompleteSpace γ] {p : α → Prop} {e : α →
(hc :
tendsto (f ∘ Subtype.val) (comap (DenseEmbedding.subtypeEmb p e) (𝓝 ⟨b, this⟩)) (𝓝 c))⟩ :=
uniformly_extend_exists ue'.to_uniformInducing de'.dense hf _
- rw [nhds_subtype_eq_comap] at hc
- simp [comap_comap] at hc
- change tendsto (f ∘ @Subtype.val α p) (comap (e ∘ @Subtype.val α p) (𝓝 b)) (𝓝 c) at hc
- rw [← comap_comap, tendsto_comap'_iff] at hc
+ rw [nhds_subtype_eq_comap] at hc
+ simp [comap_comap] at hc
+ change tendsto (f ∘ @Subtype.val α p) (comap (e ∘ @Subtype.val α p) (𝓝 b)) (𝓝 c) at hc
+ rw [← comap_comap, tendsto_comap'_iff] at hc
exact ⟨c, hc⟩
exact
⟨_, hb, fun x => by
@@ -660,12 +659,12 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
have : preimage (fun p : β × β => (f p.1, f p.2)) s ∈ 𝓤 β := h_f hs
have :
preimage (fun p : β × β => (f p.1, f p.2)) s ∈ comap (fun x : β × β => (e x.1, e x.2)) (𝓤 α) :=
- by rwa [h_e.comap_uniformity.symm] at this
+ by rwa [h_e.comap_uniformity.symm] at this
let ⟨t, ht, ts⟩ := this
show preimage (fun p : α × α => (ψ p.1, ψ p.2)) d ∈ 𝓤 α from
(𝓤 α).sets_of_superset (interior_mem_uniformity ht) fun ⟨x₁, x₂⟩ hx_t =>
have : 𝓝 (x₁, x₂) ≤ 𝓟 (interior t) := isOpen_iff_nhds.mp isOpen_interior (x₁, x₂) hx_t
- have : interior t ∈ 𝓝 x₁ ×ᶠ 𝓝 x₂ := by rwa [nhds_prod_eq, le_principal_iff] at this
+ have : interior t ∈ 𝓝 x₁ ×ᶠ 𝓝 x₂ := by rwa [nhds_prod_eq, le_principal_iff] at this
let ⟨m₁, hm₁, m₂, hm₂, (hm : m₁ ×ˢ m₂ ⊆ interior t)⟩ := mem_prod_iff.mp this
let ⟨a, ha₁, _, ha₂⟩ := h_pnt hm₁
let ⟨b, hb₁, hb₂, _⟩ := h_pnt hm₂
@@ -687,7 +686,7 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
#align uniform_continuous_uniformly_extend uniformContinuous_uniformly_extend
-/
-variable [SeparatedSpace γ]
+variable [T0Space γ]
#print uniformly_extend_of_ind /-
theorem uniformly_extend_of_ind (b : β) : ψ (e b) = f b :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -625,7 +625,7 @@ theorem uniform_extend_subtype [CompleteSpace γ] {p : α → Prop} {e : α →
⟨_, hb, fun x => by
change e x ∈ closure (e '' s) → x ∈ range Subtype.val
rw [← closure_induced, mem_closure_iff_clusterPt, ClusterPt, ne_bot_iff, nhds_induced, ←
- de.to_dense_inducing.nhds_eq_comap, ← mem_closure_iff_nhds_neBot, hs.closure_eq]
+ de.to_dense_inducing.nhds_eq_comap, ← mem_closure_iff_nhds_ne_bot, hs.closure_eq]
exact fun hxs => ⟨⟨x, hp x hxs⟩, rfl⟩⟩
#align uniform_extend_subtype uniform_extend_subtype
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Sébastien Gouëzel, Patrick Massot
-/
-import Mathbin.Topology.UniformSpace.Cauchy
-import Mathbin.Topology.UniformSpace.Separation
-import Mathbin.Topology.DenseEmbedding
+import Topology.UniformSpace.Cauchy
+import Topology.UniformSpace.Separation
+import Topology.DenseEmbedding
#align_import topology.uniform_space.uniform_embedding from "leanprover-community/mathlib"@"195fcd60ff2bfe392543bceb0ec2adcdb472db4c"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -47,7 +47,7 @@ structure UniformInducing (f : α → β) : Prop where
#print UniformInducing.comap_uniformSpace /-
protected theorem UniformInducing.comap_uniformSpace {f : α → β} (hf : UniformInducing f) :
‹UniformSpace β›.comap f = ‹UniformSpace α› :=
- uniformSpace_eq hf.1
+ UniformSpace.ext hf.1
#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Sébastien Gouëzel, Patrick Massot
-
-! This file was ported from Lean 3 source module topology.uniform_space.uniform_embedding
-! leanprover-community/mathlib commit 195fcd60ff2bfe392543bceb0ec2adcdb472db4c
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.UniformSpace.Cauchy
import Mathbin.Topology.UniformSpace.Separation
import Mathbin.Topology.DenseEmbedding
+#align_import topology.uniform_space.uniform_embedding from "leanprover-community/mathlib"@"195fcd60ff2bfe392543bceb0ec2adcdb472db4c"
+
/-!
# Uniform embeddings of uniform spaces.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -54,11 +54,14 @@ protected theorem UniformInducing.comap_uniformSpace {f : α → β} (hf : Unifo
#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
-/
+#print uniformInducing_iff' /-
theorem uniformInducing_iff' {f : α → β} :
UniformInducing f ↔ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
rw [uniformInducing_iff, UniformContinuous, tendsto_iff_comap, le_antisymm_iff, and_comm'] <;> rfl
#align uniform_inducing_iff' uniformInducing_iff'
+-/
+#print Filter.HasBasis.uniformInducing_iff /-
protected theorem Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformInducing f ↔
@@ -67,11 +70,14 @@ protected theorem Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop}
by
simp [uniformInducing_iff', h.uniform_continuous_iff h', (h'.comap _).le_basis_iffₓ h, subset_def]
#align filter.has_basis.uniform_inducing_iff Filter.HasBasis.uniformInducing_iff
+-/
+#print UniformInducing.mk' /-
theorem UniformInducing.mk' {f : α → β}
(h : ∀ s, s ∈ 𝓤 α ↔ ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s) : UniformInducing f :=
⟨by simp [eq_comm, Filter.ext_iff, subset_def, h]⟩
#align uniform_inducing.mk' UniformInducing.mk'
+-/
#print uniformInducing_id /-
theorem uniformInducing_id : UniformInducing (@id α) :=
@@ -86,11 +92,13 @@ theorem UniformInducing.comp {g : β → γ} (hg : UniformInducing g) {f : α
#align uniform_inducing.comp UniformInducing.comp
-/
+#print UniformInducing.basis_uniformity /-
theorem UniformInducing.basis_uniformity {f : α → β} (hf : UniformInducing f) {ι : Sort _}
{p : ι → Prop} {s : ι → Set (β × β)} (H : (𝓤 β).HasBasis p s) :
(𝓤 α).HasBasis p fun i => Prod.map f f ⁻¹' s i :=
hf.1 ▸ H.comap _
#align uniform_inducing.basis_uniformity UniformInducing.basis_uniformity
+-/
#print UniformInducing.cauchy_map_iff /-
theorem UniformInducing.cauchy_map_iff {f : α → β} (hf : UniformInducing f) {F : Filter α} :
@@ -135,6 +143,7 @@ protected theorem UniformInducing.inducing {f : α → β} (h : UniformInducing
#align uniform_inducing.inducing UniformInducing.inducing
-/
+#print UniformInducing.prod /-
theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
{e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformInducing e₁) (h₂ : UniformInducing e₂) :
UniformInducing fun p : α × β => (e₁ p.1, e₂ p.2) :=
@@ -142,6 +151,7 @@ theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [U
simp [(· ∘ ·), uniformity_prod, h₁.comap_uniformity.symm, h₂.comap_uniformity.symm, comap_inf,
comap_comap]⟩
#align uniform_inducing.prod UniformInducing.prod
+-/
#print UniformInducing.denseInducing /-
theorem UniformInducing.denseInducing {f : α → β} (h : UniformInducing f) (hd : DenseRange f) :
@@ -167,11 +177,14 @@ structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop wher
#align uniform_embedding UniformEmbedding
-/
+#print uniformEmbedding_iff' /-
theorem uniformEmbedding_iff' {f : α → β} :
UniformEmbedding f ↔ Injective f ∧ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
rw [uniformEmbedding_iff, and_comm', uniformInducing_iff']
#align uniform_embedding_iff' uniformEmbedding_iff'
+-/
+#print Filter.HasBasis.uniformEmbedding_iff' /-
theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformEmbedding f ↔
@@ -180,7 +193,9 @@ theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' :
∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j :=
by rw [uniformEmbedding_iff, and_comm', h.uniform_inducing_iff h']
#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'
+-/
+#print Filter.HasBasis.uniformEmbedding_iff /-
theorem Filter.HasBasis.uniformEmbedding_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformEmbedding f ↔
@@ -188,6 +203,7 @@ theorem Filter.HasBasis.uniformEmbedding_iff {ι ι'} {p : ι → Prop} {p' : ι
UniformContinuous f ∧ ∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j :=
by simp only [h.uniform_embedding_iff' h', h.uniform_continuous_iff h', exists_prop]
#align filter.has_basis.uniform_embedding_iff Filter.HasBasis.uniformEmbedding_iff
+-/
#print uniformEmbedding_subtype_val /-
theorem uniformEmbedding_subtype_val {p : α → Prop} :
@@ -220,10 +236,12 @@ theorem UniformEmbedding.comp {g : β → γ} (hg : UniformEmbedding g) {f : α
#align uniform_embedding.comp UniformEmbedding.comp
-/
+#print Equiv.uniformEmbedding /-
theorem Equiv.uniformEmbedding {α β : Type _} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
(h₁ : UniformContinuous f) (h₂ : UniformContinuous f.symm) : UniformEmbedding f :=
uniformEmbedding_iff'.2 ⟨f.Injective, h₁, by rwa [← Equiv.prodCongr_apply, ← map_equiv_symm]⟩
#align equiv.uniform_embedding Equiv.uniformEmbedding
+-/
#print uniformEmbedding_inl /-
theorem uniformEmbedding_inl : UniformEmbedding (Sum.inl : α → Sum α β) :=
@@ -263,6 +281,7 @@ theorem uniformEmbedding_iff_uniformInducing [T0Space α] {f : α → β} :
#align uniform_embedding_iff_uniform_inducing uniformEmbedding_iff_uniformInducing
-/
+#print comap_uniformity_of_spaced_out /-
/-- If a map `f : α → β` sends any two distinct points to point that are **not** related by a fixed
`s ∈ 𝓤 β`, then `f` is uniform inducing with respect to the discrete uniformity on `α`:
the preimage of `𝓤 β` under `prod.map f f` is the principal filter generated by the diagonal in
@@ -277,7 +296,9 @@ theorem comap_uniformity_of_spaced_out {α} {f : α → β} {s : Set (β × β)}
_ ≤ 𝓟 idRel := principal_mono.2 _
rintro ⟨x, y⟩; simpa [not_imp_not] using @hf x y
#align comap_uniformity_of_spaced_out comap_uniformity_of_spaced_out
+-/
+#print uniformEmbedding_of_spaced_out /-
/-- If a map `f : α → β` sends any two distinct points to point that are **not** related by a fixed
`s ∈ 𝓤 β`, then `f` is a uniform embedding with respect to the discrete uniformity on `α`. -/
theorem uniformEmbedding_of_spaced_out {α} {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
@@ -287,6 +308,7 @@ theorem uniformEmbedding_of_spaced_out {α} {f : α → β} {s : Set (β × β)}
haveI : SeparatedSpace α := separated_iff_t2.2 inferInstance
exact UniformInducing.uniformEmbedding ⟨comap_uniformity_of_spaced_out hs hf⟩
#align uniform_embedding_of_spaced_out uniformEmbedding_of_spaced_out
+-/
#print UniformEmbedding.embedding /-
protected theorem UniformEmbedding.embedding {f : α → β} (h : UniformEmbedding f) : Embedding f :=
@@ -304,6 +326,7 @@ theorem UniformEmbedding.denseEmbedding {f : α → β} (h : UniformEmbedding f)
#align uniform_embedding.dense_embedding UniformEmbedding.denseEmbedding
-/
+#print closedEmbedding_of_spaced_out /-
theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopology α]
[SeparatedSpace β] {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
(hf : Pairwise fun x y => (f x, f y) ∉ s) : ClosedEmbedding f :=
@@ -313,6 +336,7 @@ theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopolo
{ (uniformEmbedding_of_spaced_out hs hf).Embedding with
closed_range := isClosed_range_of_spaced_out hs hf }
#align closed_embedding_of_spaced_out closedEmbedding_of_spaced_out
+-/
#print closure_image_mem_nhds_of_uniformInducing /-
theorem closure_image_mem_nhds_of_uniformInducing {s : Set (α × α)} {e : α → β} (b : β)
@@ -360,11 +384,13 @@ theorem uniformEmbedding_subtypeEmb (p : α → Prop) {e : α → β} (ue : Unif
#align uniform_embedding_subtype_emb uniformEmbedding_subtypeEmb
-/
+#print UniformEmbedding.prod /-
theorem UniformEmbedding.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
{e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformEmbedding e₁) (h₂ : UniformEmbedding e₂) :
UniformEmbedding fun p : α × β => (e₁ p.1, e₂ p.2) :=
{ h₁.to_uniformInducing.Prod h₂.to_uniformInducing with inj := h₁.inj.Prod_map h₂.inj }
#align uniform_embedding.prod UniformEmbedding.prod
+-/
#print isComplete_of_complete_image /-
theorem isComplete_of_complete_image {m : α → β} {s : Set α} (hm : UniformInducing m)
@@ -453,6 +479,7 @@ instance ULift.completeSpace [h : CompleteSpace α] : CompleteSpace (ULift α) :
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print completeSpace_extension /-
theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense : DenseRange m)
(h : ∀ f : Filter β, Cauchy f → ∃ x : α, map m f ≤ 𝓝 x) : CompleteSpace α :=
⟨fun f : Filter α => fun hf : Cauchy f =>
@@ -502,6 +529,7 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
f ≤ g := by assumption
_ ≤ 𝓝 x := le_nhds_of_cauchy_adhp ‹Cauchy g› this⟩⟩
#align complete_space_extension completeSpace_extension
+-/
#print totallyBounded_preimage /-
theorem totallyBounded_preimage {f : α → β} {s : Set β} (hf : UniformEmbedding f)
@@ -532,11 +560,13 @@ instance CompleteSpace.sum [CompleteSpace α] [CompleteSpace β] : CompleteSpace
end
+#print uniformEmbedding_comap /-
theorem uniformEmbedding_comap {α : Type _} {β : Type _} {f : α → β} [u : UniformSpace β]
(hf : Function.Injective f) : @UniformEmbedding α β (UniformSpace.comap f u) u f :=
@UniformEmbedding.mk _ _ (UniformSpace.comap f u) _ _
(@UniformInducing.mk _ _ (UniformSpace.comap f u) _ _ rfl) hf
#align uniform_embedding_comap uniformEmbedding_comap
+-/
#print Embedding.comapUniformSpace /-
/-- Pull back a uniform space structure by an embedding, adjusting the new uniform structure to
@@ -547,11 +577,13 @@ def Embedding.comapUniformSpace {α β} [TopologicalSpace α] [u : UniformSpace
#align embedding.comap_uniform_space Embedding.comapUniformSpace
-/
+#print Embedding.to_uniformEmbedding /-
theorem Embedding.to_uniformEmbedding {α β} [TopologicalSpace α] [u : UniformSpace β] (f : α → β)
(h : Embedding f) : @UniformEmbedding α β (h.comap_uniformSpace f) u f :=
{ comap_uniformity := rfl
inj := h.inj }
#align embedding.to_uniform_embedding Embedding.to_uniformEmbedding
+-/
section UniformExtension
@@ -559,7 +591,6 @@ variable {α : Type _} {β : Type _} {γ : Type _} [UniformSpace α] [UniformSpa
{e : β → α} (h_e : UniformInducing e) (h_dense : DenseRange e) {f : β → γ}
(h_f : UniformContinuous f)
--- mathport name: exprψ
local notation "ψ" => (h_e.DenseInducing h_dense).extend f
#print uniformly_extend_exists /-
@@ -573,6 +604,7 @@ theorem uniformly_extend_exists [CompleteSpace γ] (a : α) : ∃ c, Tendsto f (
#align uniformly_extend_exists uniformly_extend_exists
-/
+#print uniform_extend_subtype /-
theorem uniform_extend_subtype [CompleteSpace γ] {p : α → Prop} {e : α → β} {f : α → γ} {b : β}
{s : Set α} (hf : UniformContinuous fun x : Subtype p => f x.val) (he : UniformEmbedding e)
(hd : ∀ x : β, x ∈ closure (range e)) (hb : closure (e '' s) ∈ 𝓝 b) (hs : IsClosed s)
@@ -599,8 +631,7 @@ theorem uniform_extend_subtype [CompleteSpace γ] {p : α → Prop} {e : α →
de.to_dense_inducing.nhds_eq_comap, ← mem_closure_iff_nhds_neBot, hs.closure_eq]
exact fun hxs => ⟨⟨x, hp x hxs⟩, rfl⟩⟩
#align uniform_extend_subtype uniform_extend_subtype
-
-include h_f
+-/
#print uniformly_extend_spec /-
theorem uniformly_extend_spec [CompleteSpace γ] (a : α) : Tendsto f (comap e (𝓝 a)) (𝓝 (ψ a)) := by
@@ -614,6 +645,7 @@ theorem uniformly_extend_spec [CompleteSpace γ] (a : α) : Tendsto f (comap e (
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print uniformContinuous_uniformly_extend /-
theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformContinuous ψ :=
fun d hd =>
let ⟨s, hs, hs_comp⟩ :=
@@ -656,8 +688,7 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
have : (a, b) ∈ s := @this (a, b) ⟨ha₁, hb₁⟩
hs_comp <| show (ψ x₁, ψ x₂) ∈ compRel s (compRel s s) from ⟨a, ha₂, ⟨b, this, hb₂⟩⟩
#align uniform_continuous_uniformly_extend uniformContinuous_uniformly_extend
-
-omit h_f
+-/
variable [SeparatedSpace γ]
@@ -667,9 +698,11 @@ theorem uniformly_extend_of_ind (b : β) : ψ (e b) = f b :=
#align uniformly_extend_of_ind uniformly_extend_of_ind
-/
+#print uniformly_extend_unique /-
theorem uniformly_extend_unique {g : α → γ} (hg : ∀ b, g (e b) = f b) (hc : Continuous g) : ψ = g :=
DenseInducing.extend_unique _ hg hc
#align uniformly_extend_unique uniformly_extend_unique
+-/
end UniformExtension
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -275,7 +275,6 @@ theorem comap_uniformity_of_spaced_out {α} {f : α → β} {s : Set (β × β)}
comap (Prod.map f f) (𝓤 β) ≤ comap (Prod.map f f) (𝓟 s) := comap_mono (le_principal_iff.2 hs)
_ = 𝓟 (Prod.map f f ⁻¹' s) := comap_principal
_ ≤ 𝓟 idRel := principal_mono.2 _
-
rintro ⟨x, y⟩; simpa [not_imp_not] using @hf x y
#align comap_uniformity_of_spaced_out comap_uniformity_of_spaced_out
@@ -501,8 +500,7 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
⟨x,
calc
f ≤ g := by assumption
- _ ≤ 𝓝 x := le_nhds_of_cauchy_adhp ‹Cauchy g› this
- ⟩⟩
+ _ ≤ 𝓝 x := le_nhds_of_cauchy_adhp ‹Cauchy g› this⟩⟩
#align complete_space_extension completeSpace_extension
#print totallyBounded_preimage /-
@@ -647,7 +645,6 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
_ ⊆ preimage (fun p : β × β => (e p.1, e p.2)) (interior t) := preimage_mono hm
_ ⊆ preimage (fun p : β × β => (e p.1, e p.2)) t := (preimage_mono interior_subset)
_ ⊆ preimage (fun p : β × β => (f p.1, f p.2)) s := ts
-
have : (f '' (e ⁻¹' m₁)) ×ˢ (f '' (e ⁻¹' m₂)) ⊆ s :=
calc
(f '' (e ⁻¹' m₁)) ×ˢ (f '' (e ⁻¹' m₂)) =
@@ -656,7 +653,6 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
_ ⊆ (fun p : β × β => (f p.1, f p.2)) '' ((fun p : β × β => (f p.1, f p.2)) ⁻¹' s) :=
(monotone_image this)
_ ⊆ s := image_preimage_subset _ _
-
have : (a, b) ∈ s := @this (a, b) ⟨ha₁, hb₁⟩
hs_comp <| show (ψ x₁, ψ x₂) ∈ compRel s (compRel s s) from ⟨a, ha₂, ⟨b, this, hb₂⟩⟩
#align uniform_continuous_uniformly_extend uniformContinuous_uniformly_extend
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -318,35 +318,34 @@ theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopolo
#print closure_image_mem_nhds_of_uniformInducing /-
theorem closure_image_mem_nhds_of_uniformInducing {s : Set (α × α)} {e : α → β} (b : β)
(he₁ : UniformInducing e) (he₂ : DenseInducing e) (hs : s ∈ 𝓤 α) :
- ∃ a, closure (e '' { a' | (a, a') ∈ s }) ∈ 𝓝 b :=
+ ∃ a, closure (e '' {a' | (a, a') ∈ s}) ∈ 𝓝 b :=
have : s ∈ comap (fun p : α × α => (e p.1, e p.2)) (𝓤 β) := he₁.comap_uniformity.symm ▸ hs
let ⟨t₁, ht₁u, ht₁⟩ := this
have ht₁ : ∀ p : α × α, (e p.1, e p.2) ∈ t₁ → p ∈ s := ht₁
let ⟨t₂, ht₂u, ht₂s, ht₂c⟩ := comp_symm_of_uniformity ht₁u
let ⟨t, htu, hts, htc⟩ := comp_symm_of_uniformity ht₂u
- have : preimage e { b' | (b, b') ∈ t₂ } ∈ comap e (𝓝 b) :=
+ have : preimage e {b' | (b, b') ∈ t₂} ∈ comap e (𝓝 b) :=
preimage_mem_comap <| mem_nhds_left b ht₂u
let ⟨a, (ha : (b, e a) ∈ t₂)⟩ := (he₂.comap_nhds_neBot _).nonempty_of_mem this
have :
∀ (b') (s' : Set (β × β)),
- (b, b') ∈ t →
- s' ∈ 𝓤 β → ({ y : β | (b', y) ∈ s' } ∩ e '' { a' : α | (a, a') ∈ s }).Nonempty :=
+ (b, b') ∈ t → s' ∈ 𝓤 β → ({y : β | (b', y) ∈ s'} ∩ e '' {a' : α | (a, a') ∈ s}).Nonempty :=
fun b' s' hb' hs' =>
- have : preimage e { b'' | (b', b'') ∈ s' ∩ t } ∈ comap e (𝓝 b') :=
+ have : preimage e {b'' | (b', b'') ∈ s' ∩ t} ∈ comap e (𝓝 b') :=
preimage_mem_comap <| mem_nhds_left b' <| inter_mem hs' htu
let ⟨a₂, ha₂s', ha₂t⟩ := (he₂.comap_nhds_neBot _).nonempty_of_mem this
have : (e a, e a₂) ∈ t₁ :=
ht₂c <| prod_mk_mem_compRel (ht₂s ha) <| htc <| prod_mk_mem_compRel hb' ha₂t
- have : e a₂ ∈ { b'' : β | (b', b'') ∈ s' } ∩ e '' { a' | (a, a') ∈ s } :=
+ have : e a₂ ∈ {b'' : β | (b', b'') ∈ s'} ∩ e '' {a' | (a, a') ∈ s} :=
⟨ha₂s', mem_image_of_mem _ <| ht₁ (a, a₂) this⟩
⟨_, this⟩
- have : ∀ b', (b, b') ∈ t → NeBot (𝓝 b' ⊓ 𝓟 (e '' { a' | (a, a') ∈ s })) :=
+ have : ∀ b', (b, b') ∈ t → NeBot (𝓝 b' ⊓ 𝓟 (e '' {a' | (a, a') ∈ s})) :=
by
intro b' hb'
rw [nhds_eq_uniformity, lift'_inf_principal_eq, lift'_ne_bot_iff]
exact fun s => this b' s hb'
exact monotone_preimage.inter monotone_const
- have : ∀ b', (b, b') ∈ t → b' ∈ closure (e '' { a' | (a, a') ∈ s }) := fun b' hb' => by
+ have : ∀ b', (b, b') ∈ t → b' ∈ closure (e '' {a' | (a, a') ∈ s}) := fun b' hb' => by
rw [closure_eq_cluster_pts] <;> exact this b' hb'
⟨a, (𝓝 b).sets_of_superset (mem_nhds_left b htu) this⟩
#align closure_image_mem_nhds_of_uniform_inducing closure_image_mem_nhds_of_uniformInducing
@@ -458,7 +457,7 @@ instance ULift.completeSpace [h : CompleteSpace α] : CompleteSpace (ULift α) :
theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense : DenseRange m)
(h : ∀ f : Filter β, Cauchy f → ∃ x : α, map m f ≤ 𝓝 x) : CompleteSpace α :=
⟨fun f : Filter α => fun hf : Cauchy f =>
- let p : Set (α × α) → Set α → Set α := fun s t => { y : α | ∃ x : α, x ∈ t ∧ (x, y) ∈ s }
+ let p : Set (α × α) → Set α → Set α := fun s t => {y : α | ∃ x : α, x ∈ t ∧ (x, y) ∈ s}
let g := (𝓤 α).lift fun s => f.lift' (p s)
have mp₀ : Monotone p := fun a b h t s ⟨x, xs, xa⟩ => ⟨x, xs, h xa⟩
have mp₁ : ∀ {s}, Monotone (p s) := fun s a b h x ⟨y, ya, yxs⟩ => ⟨y, h ya, yxs⟩
@@ -475,11 +474,11 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
let ⟨t'', ht'', ht'_sub⟩ := (mem_lift'_sets mp₁).mp ht_mem
let ⟨x, (hx : x ∈ t'')⟩ := hf.left.nonempty_of_mem ht''
have h₀ : NeBot (𝓝[range m] x) := Dense.nhdsWithin_neBot x
- have h₁ : { y | (x, y) ∈ t' } ∈ 𝓝[range m] x :=
+ have h₁ : {y | (x, y) ∈ t'} ∈ 𝓝[range m] x :=
@mem_inf_of_left α (𝓝 x) (𝓟 (range m)) _ <| mem_nhds_left x ht'
have h₂ : range m ∈ 𝓝[range m] x :=
@mem_inf_of_right α (𝓝 x) (𝓟 (range m)) _ <| Subset.refl _
- have : { y | (x, y) ∈ t' } ∩ range m ∈ 𝓝[range m] x := @inter_mem α (𝓝[range m] x) _ _ h₁ h₂
+ have : {y | (x, y) ∈ t'} ∩ range m ∈ 𝓝[range m] x := @inter_mem α (𝓝[range m] x) _ _ h₁ h₂
let ⟨y, xyt', b, b_eq⟩ := h₀.nonempty_of_mem this
⟨b, b_eq.symm ▸ ht'_sub ⟨x, hx, xyt'⟩⟩
have : Cauchy g :=
@@ -584,8 +583,7 @@ theorem uniform_extend_subtype [CompleteSpace γ] {p : α → Prop} {e : α →
have de : DenseEmbedding e := he.DenseEmbedding hd
have de' : DenseEmbedding (DenseEmbedding.subtypeEmb p e) := de.subtype p
have ue' : UniformEmbedding (DenseEmbedding.subtypeEmb p e) := uniformEmbedding_subtypeEmb _ he de
- have : b ∈ closure (e '' { x | p x }) :=
- (closure_mono <| monotone_image <| hp) (mem_of_mem_nhds hb)
+ have : b ∈ closure (e '' {x | p x}) := (closure_mono <| monotone_image <| hp) (mem_of_mem_nhds hb)
let
⟨c,
(hc :
@@ -627,8 +625,7 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
fun a m hm =>
have nb : NeBot (map f (comap e (𝓝 a))) :=
((h_e.DenseInducing h_dense).comap_nhds_neBot _).map _
- have :
- f '' preimage e m ∩ ({ c | (c, ψ a) ∈ s } ∩ { c | (ψ a, c) ∈ s }) ∈ map f (comap e (𝓝 a)) :=
+ have : f '' preimage e m ∩ ({c | (c, ψ a) ∈ s} ∩ {c | (ψ a, c) ∈ s}) ∈ map f (comap e (𝓝 a)) :=
inter_mem (image_mem_map <| preimage_mem_comap <| hm)
(uniformly_extend_spec h_e h_dense h_f _
(inter_mem (mem_nhds_right _ hs) (mem_nhds_left _ hs)))
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -373,10 +373,10 @@ theorem isComplete_of_complete_image {m : α → β} {s : Set α} (hm : UniformI
(hs : IsComplete (m '' s)) : IsComplete s :=
by
intro f hf hfs
- rw [le_principal_iff] at hfs
+ rw [le_principal_iff] at hfs
obtain ⟨_, ⟨x, hx, rfl⟩, hyf⟩ : ∃ y ∈ m '' s, map m f ≤ 𝓝 y
exact hs (f.map m) (hf.map hm.uniform_continuous) (le_principal_iff.2 (image_mem_map hfs))
- rw [map_le_iff_le_comap, ← nhds_induced, ← hm.inducing.induced] at hyf
+ rw [map_le_iff_le_comap, ← nhds_induced, ← hm.inducing.induced] at hyf
exact ⟨x, hx, hyf⟩
#align is_complete_of_complete_image isComplete_of_complete_image
-/
@@ -396,14 +396,14 @@ theorem isComplete_image_iff {m : α → β} {s : Set α} (hm : UniformInducing
refine' ⟨isComplete_of_complete_image hm, fun c => _⟩
haveI : CompleteSpace s := c.complete_space_coe
set m' : s → β := m ∘ coe
- suffices IsComplete (range m') by rwa [range_comp, Subtype.range_coe] at this
+ suffices IsComplete (range m') by rwa [range_comp, Subtype.range_coe] at this
have hm' : UniformInducing m' := hm.comp uniform_embedding_subtype_coe.to_uniform_inducing
intro f hf hfm
- rw [Filter.le_principal_iff] at hfm
+ rw [Filter.le_principal_iff] at hfm
have cf' : Cauchy (comap m' f) :=
hf.comap' hm'.comap_uniformity.le (ne_bot.comap_of_range_mem hf.1 hfm)
rcases CompleteSpace.complete cf' with ⟨x, hx⟩
- rw [hm'.inducing.nhds_eq_comap, comap_le_comap_iff hfm] at hx
+ rw [hm'.inducing.nhds_eq_comap, comap_le_comap_iff hfm] at hx
use m' x, mem_range_self _, hx
#align is_complete_image_iff isComplete_image_iff
-/
@@ -510,13 +510,13 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
theorem totallyBounded_preimage {f : α → β} {s : Set β} (hf : UniformEmbedding f)
(hs : TotallyBounded s) : TotallyBounded (f ⁻¹' s) := fun t ht =>
by
- rw [← hf.comap_uniformity] at ht
+ rw [← hf.comap_uniformity] at ht
rcases mem_comap.2 ht with ⟨t', ht', ts⟩
rcases totallyBounded_iff_subset.1 (totallyBounded_subset (image_preimage_subset f s) hs) _
ht' with
⟨c, cs, hfc, hct⟩
refine' ⟨f ⁻¹' c, hfc.preimage (hf.inj.inj_on _), fun x h => _⟩
- have := hct (mem_image_of_mem f h); simp at this⊢
+ have := hct (mem_image_of_mem f h); simp at this ⊢
rcases this with ⟨z, zc, zt⟩
rcases cs zc with ⟨y, yc, rfl⟩
exact ⟨y, zc, ts zt⟩
@@ -591,10 +591,10 @@ theorem uniform_extend_subtype [CompleteSpace γ] {p : α → Prop} {e : α →
(hc :
tendsto (f ∘ Subtype.val) (comap (DenseEmbedding.subtypeEmb p e) (𝓝 ⟨b, this⟩)) (𝓝 c))⟩ :=
uniformly_extend_exists ue'.to_uniformInducing de'.dense hf _
- rw [nhds_subtype_eq_comap] at hc
- simp [comap_comap] at hc
- change tendsto (f ∘ @Subtype.val α p) (comap (e ∘ @Subtype.val α p) (𝓝 b)) (𝓝 c) at hc
- rw [← comap_comap, tendsto_comap'_iff] at hc
+ rw [nhds_subtype_eq_comap] at hc
+ simp [comap_comap] at hc
+ change tendsto (f ∘ @Subtype.val α p) (comap (e ∘ @Subtype.val α p) (𝓝 b)) (𝓝 c) at hc
+ rw [← comap_comap, tendsto_comap'_iff] at hc
exact ⟨c, hc⟩
exact
⟨_, hb, fun x => by
@@ -636,12 +636,12 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
have : preimage (fun p : β × β => (f p.1, f p.2)) s ∈ 𝓤 β := h_f hs
have :
preimage (fun p : β × β => (f p.1, f p.2)) s ∈ comap (fun x : β × β => (e x.1, e x.2)) (𝓤 α) :=
- by rwa [h_e.comap_uniformity.symm] at this
+ by rwa [h_e.comap_uniformity.symm] at this
let ⟨t, ht, ts⟩ := this
show preimage (fun p : α × α => (ψ p.1, ψ p.2)) d ∈ 𝓤 α from
(𝓤 α).sets_of_superset (interior_mem_uniformity ht) fun ⟨x₁, x₂⟩ hx_t =>
have : 𝓝 (x₁, x₂) ≤ 𝓟 (interior t) := isOpen_iff_nhds.mp isOpen_interior (x₁, x₂) hx_t
- have : interior t ∈ 𝓝 x₁ ×ᶠ 𝓝 x₂ := by rwa [nhds_prod_eq, le_principal_iff] at this
+ have : interior t ∈ 𝓝 x₁ ×ᶠ 𝓝 x₂ := by rwa [nhds_prod_eq, le_principal_iff] at this
let ⟨m₁, hm₁, m₂, hm₂, (hm : m₁ ×ˢ m₂ ⊆ interior t)⟩ := mem_prod_iff.mp this
let ⟨a, ha₁, _, ha₂⟩ := h_pnt hm₁
let ⟨b, hb₁, hb₂, _⟩ := h_pnt hm₂
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -24,7 +24,7 @@ Extension of uniform continuous functions.
open Filter TopologicalSpace Set Function Classical
-open Classical uniformity Topology Filter
+open scoped Classical uniformity Topology Filter
section
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -54,20 +54,11 @@ protected theorem UniformInducing.comap_uniformSpace {f : α → β} (hf : Unifo
#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
-/
-/- warning: uniform_inducing_iff' -> uniformInducing_iff' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toHasLe.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1)))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.instPartialOrderFilter.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1)))
-Case conversion may be inaccurate. Consider using '#align uniform_inducing_iff' uniformInducing_iff'ₓ'. -/
theorem uniformInducing_iff' {f : α → β} :
UniformInducing f ↔ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
rw [uniformInducing_iff, UniformContinuous, tendsto_iff_comap, le_antisymm_iff, and_comm'] <;> rfl
#align uniform_inducing_iff' uniformInducing_iff'
-/- warning: filter.has_basis.uniform_inducing_iff -> Filter.HasBasis.uniformInducing_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_inducing_iff Filter.HasBasis.uniformInducing_iffₓ'. -/
protected theorem Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformInducing f ↔
@@ -77,12 +68,6 @@ protected theorem Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop}
simp [uniformInducing_iff', h.uniform_continuous_iff h', (h'.comap _).le_basis_iffₓ h, subset_def]
#align filter.has_basis.uniform_inducing_iff Filter.HasBasis.uniformInducing_iff
-/- warning: uniform_inducing.mk' -> UniformInducing.mk' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, (forall (s : Set.{u1} (Prod.{u1, u1} α α)), Iff (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) s (uniformity.{u1} α _inst_1)) (Exists.{succ u2} (Set.{u2} (Prod.{u2, u2} β β)) (fun (t : Set.{u2} (Prod.{u2, u2} β β)) => Exists.{0} (Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) (fun (H : Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) => forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) t) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) s))))) -> (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, (forall (s : Set.{u1} (Prod.{u1, u1} α α)), Iff (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) s (uniformity.{u1} α _inst_1)) (Exists.{succ u2} (Set.{u2} (Prod.{u2, u2} β β)) (fun (t : Set.{u2} (Prod.{u2, u2} β β)) => And (Membership.mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (instMembershipSetFilter.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) (forall (x : α) (y : α), (Membership.mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) t) -> (Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) s))))) -> (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.mk' UniformInducing.mk'ₓ'. -/
theorem UniformInducing.mk' {f : α → β}
(h : ∀ s, s ∈ 𝓤 α ↔ ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s) : UniformInducing f :=
⟨by simp [eq_comm, Filter.ext_iff, subset_def, h]⟩
@@ -101,12 +86,6 @@ theorem UniformInducing.comp {g : β → γ} (hg : UniformInducing g) {f : α
#align uniform_inducing.comp UniformInducing.comp
-/
-/- warning: uniform_inducing.basis_uniformity -> UniformInducing.basis_uniformity is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) -> (forall {ι : Sort.{u3}} {p : ι -> Prop} {s : ι -> (Set.{u2} (Prod.{u2, u2} β β))}, (Filter.HasBasis.{u2, u3} (Prod.{u2, u2} β β) ι (uniformity.{u2} β _inst_2) p s) -> (Filter.HasBasis.{u1, u3} (Prod.{u1, u1} α α) ι (uniformity.{u1} α _inst_1) p (fun (i : ι) => Set.preimage.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (s i))))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u3}} [_inst_1 : UniformSpace.{u2} α] [_inst_2 : UniformSpace.{u3} β] {f : α -> β}, (UniformInducing.{u2, u3} α β _inst_1 _inst_2 f) -> (forall {ι : Sort.{u1}} {p : ι -> Prop} {s : ι -> (Set.{u3} (Prod.{u3, u3} β β))}, (Filter.HasBasis.{u3, u1} (Prod.{u3, u3} β β) ι (uniformity.{u3} β _inst_2) p s) -> (Filter.HasBasis.{u2, u1} (Prod.{u2, u2} α α) ι (uniformity.{u2} α _inst_1) p (fun (i : ι) => Set.preimage.{u2, u3} (Prod.{u2, u2} α α) (Prod.{u3, u3} β β) (Prod.map.{u2, u3, u2, u3} α β α β f f) (s i))))
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.basis_uniformity UniformInducing.basis_uniformityₓ'. -/
theorem UniformInducing.basis_uniformity {f : α → β} (hf : UniformInducing f) {ι : Sort _}
{p : ι → Prop} {s : ι → Set (β × β)} (H : (𝓤 β).HasBasis p s) :
(𝓤 α).HasBasis p fun i => Prod.map f f ⁻¹' s i :=
@@ -156,12 +135,6 @@ protected theorem UniformInducing.inducing {f : α → β} (h : UniformInducing
#align uniform_inducing.inducing UniformInducing.inducing
-/
-/- warning: uniform_inducing.prod -> UniformInducing.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {α' : Type.{u3}} {β' : Type.{u4}} [_inst_4 : UniformSpace.{u3} α'] [_inst_5 : UniformSpace.{u4} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformInducing.{u1, u3} α α' _inst_1 _inst_4 e₁) -> (UniformInducing.{u2, u4} β β' _inst_2 _inst_5 e₂) -> (UniformInducing.{max u1 u2, max u3 u4} (Prod.{u1, u2} α β) (Prod.{u3, u4} α' β') (Prod.uniformSpace.{u1, u2} α β _inst_1 _inst_2) (Prod.uniformSpace.{u3, u4} α' β' _inst_4 _inst_5) (fun (p : Prod.{u1, u2} α β) => Prod.mk.{u3, u4} α' β' (e₁ (Prod.fst.{u1, u2} α β p)) (e₂ (Prod.snd.{u1, u2} α β p))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {α' : Type.{u2}} {β' : Type.{u1}} [_inst_4 : UniformSpace.{u2} α'] [_inst_5 : UniformSpace.{u1} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformInducing.{u3, u2} α α' _inst_1 _inst_4 e₁) -> (UniformInducing.{u4, u1} β β' _inst_2 _inst_5 e₂) -> (UniformInducing.{max u3 u4, max u1 u2} (Prod.{u3, u4} α β) (Prod.{u2, u1} α' β') (instUniformSpaceProd.{u3, u4} α β _inst_1 _inst_2) (instUniformSpaceProd.{u2, u1} α' β' _inst_4 _inst_5) (fun (p : Prod.{u3, u4} α β) => Prod.mk.{u2, u1} α' β' (e₁ (Prod.fst.{u3, u4} α β p)) (e₂ (Prod.snd.{u3, u4} α β p))))
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.prod UniformInducing.prodₓ'. -/
theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
{e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformInducing e₁) (h₂ : UniformInducing e₂) :
UniformInducing fun p : α × β => (e₁ p.1, e₂ p.2) :=
@@ -194,20 +167,11 @@ structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop wher
#align uniform_embedding UniformEmbedding
-/
-/- warning: uniform_embedding_iff' -> uniformEmbedding_iff' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toHasLe.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.instPartialOrderFilter.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1))))
-Case conversion may be inaccurate. Consider using '#align uniform_embedding_iff' uniformEmbedding_iff'ₓ'. -/
theorem uniformEmbedding_iff' {f : α → β} :
UniformEmbedding f ↔ Injective f ∧ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
rw [uniformEmbedding_iff, and_comm', uniformInducing_iff']
#align uniform_embedding_iff' uniformEmbedding_iff'
-/- warning: filter.has_basis.uniform_embedding_iff' -> Filter.HasBasis.uniformEmbedding_iff' is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'ₓ'. -/
theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformEmbedding f ↔
@@ -217,9 +181,6 @@ theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' :
by rw [uniformEmbedding_iff, and_comm', h.uniform_inducing_iff h']
#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'
-/- warning: filter.has_basis.uniform_embedding_iff -> Filter.HasBasis.uniformEmbedding_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_embedding_iff Filter.HasBasis.uniformEmbedding_iffₓ'. -/
theorem Filter.HasBasis.uniformEmbedding_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformEmbedding f ↔
@@ -259,12 +220,6 @@ theorem UniformEmbedding.comp {g : β → γ} (hg : UniformEmbedding g) {f : α
#align uniform_embedding.comp UniformEmbedding.comp
-/
-/- warning: equiv.uniform_embedding -> Equiv.uniformEmbedding is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] (f : Equiv.{succ u1, succ u2} α β), (UniformContinuous.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f)) -> (UniformContinuous.{u2, u1} β α _inst_5 _inst_4 (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} β α) (fun (_x : Equiv.{succ u2, succ u1} β α) => β -> α) (Equiv.hasCoeToFun.{succ u2, succ u1} β α) (Equiv.symm.{succ u1, succ u2} α β f))) -> (UniformEmbedding.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] (f : Equiv.{succ u2, succ u1} α β), (UniformContinuous.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f)) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} β α) β (fun (_x : β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : β) => α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} β α) (Equiv.symm.{succ u2, succ u1} α β f))) -> (UniformEmbedding.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f))
-Case conversion may be inaccurate. Consider using '#align equiv.uniform_embedding Equiv.uniformEmbeddingₓ'. -/
theorem Equiv.uniformEmbedding {α β : Type _} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
(h₁ : UniformContinuous f) (h₂ : UniformContinuous f.symm) : UniformEmbedding f :=
uniformEmbedding_iff'.2 ⟨f.Injective, h₁, by rwa [← Equiv.prodCongr_apply, ← map_equiv_symm]⟩
@@ -308,12 +263,6 @@ theorem uniformEmbedding_iff_uniformInducing [T0Space α] {f : α → β} :
#align uniform_embedding_iff_uniform_inducing uniformEmbedding_iff_uniformInducing
-/
-/- warning: comap_uniformity_of_spaced_out -> comap_uniformity_of_spaced_out is a dubious translation:
-lean 3 declaration is
- forall {β : Type.{u1}} [_inst_2 : UniformSpace.{u1} β] {α : Type.{u2}} {f : α -> β} {s : Set.{u1} (Prod.{u1, u1} β β)}, (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} β β)) (Filter.{u1} (Prod.{u1, u1} β β)) (Filter.hasMem.{u1} (Prod.{u1, u1} β β)) s (uniformity.{u1} β _inst_2)) -> (Pairwise.{u2} α (fun (x : α) (y : α) => Not (Membership.Mem.{u1, u1} (Prod.{u1, u1} β β) (Set.{u1} (Prod.{u1, u1} β β)) (Set.hasMem.{u1} (Prod.{u1, u1} β β)) (Prod.mk.{u1, u1} β β (f x) (f y)) s))) -> (Eq.{succ u2} (Filter.{u2} (Prod.{u2, u2} α α)) (Filter.comap.{u2, u1} (Prod.{u2, u2} α α) (Prod.{u1, u1} β β) (Prod.map.{u2, u1, u2, u1} α β α β f f) (uniformity.{u1} β _inst_2)) (Filter.principal.{u2} (Prod.{u2, u2} α α) (idRel.{u2} α)))
-but is expected to have type
- forall {β : Type.{u2}} [_inst_2 : UniformSpace.{u2} β] {α : Type.{u1}} {f : α -> β} {s : Set.{u2} (Prod.{u2, u2} β β)}, (Membership.mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (instMembershipSetFilter.{u2} (Prod.{u2, u2} β β)) s (uniformity.{u2} β _inst_2)) -> (Pairwise.{u1} α (fun (x : α) (y : α) => Not (Membership.mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) s))) -> (Eq.{succ u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (Filter.principal.{u1} (Prod.{u1, u1} α α) (idRel.{u1} α)))
-Case conversion may be inaccurate. Consider using '#align comap_uniformity_of_spaced_out comap_uniformity_of_spaced_outₓ'. -/
/-- If a map `f : α → β` sends any two distinct points to point that are **not** related by a fixed
`s ∈ 𝓤 β`, then `f` is uniform inducing with respect to the discrete uniformity on `α`:
the preimage of `𝓤 β` under `prod.map f f` is the principal filter generated by the diagonal in
@@ -330,12 +279,6 @@ theorem comap_uniformity_of_spaced_out {α} {f : α → β} {s : Set (β × β)}
rintro ⟨x, y⟩; simpa [not_imp_not] using @hf x y
#align comap_uniformity_of_spaced_out comap_uniformity_of_spaced_out
-/- warning: uniform_embedding_of_spaced_out -> uniformEmbedding_of_spaced_out is a dubious translation:
-lean 3 declaration is
- forall {β : Type.{u1}} [_inst_2 : UniformSpace.{u1} β] {α : Type.{u2}} {f : α -> β} {s : Set.{u1} (Prod.{u1, u1} β β)}, (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} β β)) (Filter.{u1} (Prod.{u1, u1} β β)) (Filter.hasMem.{u1} (Prod.{u1, u1} β β)) s (uniformity.{u1} β _inst_2)) -> (Pairwise.{u2} α (fun (x : α) (y : α) => Not (Membership.Mem.{u1, u1} (Prod.{u1, u1} β β) (Set.{u1} (Prod.{u1, u1} β β)) (Set.hasMem.{u1} (Prod.{u1, u1} β β)) (Prod.mk.{u1, u1} β β (f x) (f y)) s))) -> (UniformEmbedding.{u2, u1} α β (Bot.bot.{u2} (UniformSpace.{u2} α) (UniformSpace.hasBot.{u2} α)) _inst_2 f)
-but is expected to have type
- forall {β : Type.{u2}} [_inst_2 : UniformSpace.{u2} β] {α : Type.{u1}} {f : α -> β} {s : Set.{u2} (Prod.{u2, u2} β β)}, (Membership.mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (instMembershipSetFilter.{u2} (Prod.{u2, u2} β β)) s (uniformity.{u2} β _inst_2)) -> (Pairwise.{u1} α (fun (x : α) (y : α) => Not (Membership.mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) s))) -> (UniformEmbedding.{u1, u2} α β (Bot.bot.{u1} (UniformSpace.{u1} α) (instBotUniformSpace.{u1} α)) _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align uniform_embedding_of_spaced_out uniformEmbedding_of_spaced_outₓ'. -/
/-- If a map `f : α → β` sends any two distinct points to point that are **not** related by a fixed
`s ∈ 𝓤 β`, then `f` is a uniform embedding with respect to the discrete uniformity on `α`. -/
theorem uniformEmbedding_of_spaced_out {α} {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
@@ -362,12 +305,6 @@ theorem UniformEmbedding.denseEmbedding {f : α → β} (h : UniformEmbedding f)
#align uniform_embedding.dense_embedding UniformEmbedding.denseEmbedding
-/
-/- warning: closed_embedding_of_spaced_out -> closedEmbedding_of_spaced_out is a dubious translation:
-lean 3 declaration is
- forall {β : Type.{u1}} [_inst_2 : UniformSpace.{u1} β] {α : Type.{u2}} [_inst_4 : TopologicalSpace.{u2} α] [_inst_5 : DiscreteTopology.{u2} α _inst_4] [_inst_6 : SeparatedSpace.{u1} β _inst_2] {f : α -> β} {s : Set.{u1} (Prod.{u1, u1} β β)}, (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} β β)) (Filter.{u1} (Prod.{u1, u1} β β)) (Filter.hasMem.{u1} (Prod.{u1, u1} β β)) s (uniformity.{u1} β _inst_2)) -> (Pairwise.{u2} α (fun (x : α) (y : α) => Not (Membership.Mem.{u1, u1} (Prod.{u1, u1} β β) (Set.{u1} (Prod.{u1, u1} β β)) (Set.hasMem.{u1} (Prod.{u1, u1} β β)) (Prod.mk.{u1, u1} β β (f x) (f y)) s))) -> (ClosedEmbedding.{u2, u1} α β _inst_4 (UniformSpace.toTopologicalSpace.{u1} β _inst_2) f)
-but is expected to have type
- forall {β : Type.{u2}} [_inst_2 : UniformSpace.{u2} β] {α : Type.{u1}} [_inst_4 : TopologicalSpace.{u1} α] [_inst_5 : DiscreteTopology.{u1} α _inst_4] [_inst_6 : SeparatedSpace.{u2} β _inst_2] {f : α -> β} {s : Set.{u2} (Prod.{u2, u2} β β)}, (Membership.mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (instMembershipSetFilter.{u2} (Prod.{u2, u2} β β)) s (uniformity.{u2} β _inst_2)) -> (Pairwise.{u1} α (fun (x : α) (y : α) => Not (Membership.mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) s))) -> (ClosedEmbedding.{u1, u2} α β _inst_4 (UniformSpace.toTopologicalSpace.{u2} β _inst_2) f)
-Case conversion may be inaccurate. Consider using '#align closed_embedding_of_spaced_out closedEmbedding_of_spaced_outₓ'. -/
theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopology α]
[SeparatedSpace β] {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
(hf : Pairwise fun x y => (f x, f y) ∉ s) : ClosedEmbedding f :=
@@ -425,12 +362,6 @@ theorem uniformEmbedding_subtypeEmb (p : α → Prop) {e : α → β} (ue : Unif
#align uniform_embedding_subtype_emb uniformEmbedding_subtypeEmb
-/
-/- warning: uniform_embedding.prod -> UniformEmbedding.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {α' : Type.{u3}} {β' : Type.{u4}} [_inst_4 : UniformSpace.{u3} α'] [_inst_5 : UniformSpace.{u4} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformEmbedding.{u1, u3} α α' _inst_1 _inst_4 e₁) -> (UniformEmbedding.{u2, u4} β β' _inst_2 _inst_5 e₂) -> (UniformEmbedding.{max u1 u2, max u3 u4} (Prod.{u1, u2} α β) (Prod.{u3, u4} α' β') (Prod.uniformSpace.{u1, u2} α β _inst_1 _inst_2) (Prod.uniformSpace.{u3, u4} α' β' _inst_4 _inst_5) (fun (p : Prod.{u1, u2} α β) => Prod.mk.{u3, u4} α' β' (e₁ (Prod.fst.{u1, u2} α β p)) (e₂ (Prod.snd.{u1, u2} α β p))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {α' : Type.{u2}} {β' : Type.{u1}} [_inst_4 : UniformSpace.{u2} α'] [_inst_5 : UniformSpace.{u1} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformEmbedding.{u3, u2} α α' _inst_1 _inst_4 e₁) -> (UniformEmbedding.{u4, u1} β β' _inst_2 _inst_5 e₂) -> (UniformEmbedding.{max u3 u4, max u1 u2} (Prod.{u3, u4} α β) (Prod.{u2, u1} α' β') (instUniformSpaceProd.{u3, u4} α β _inst_1 _inst_2) (instUniformSpaceProd.{u2, u1} α' β' _inst_4 _inst_5) (fun (p : Prod.{u3, u4} α β) => Prod.mk.{u2, u1} α' β' (e₁ (Prod.fst.{u3, u4} α β p)) (e₂ (Prod.snd.{u3, u4} α β p))))
-Case conversion may be inaccurate. Consider using '#align uniform_embedding.prod UniformEmbedding.prodₓ'. -/
theorem UniformEmbedding.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
{e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformEmbedding e₁) (h₂ : UniformEmbedding e₂) :
UniformEmbedding fun p : α × β => (e₁ p.1, e₂ p.2) :=
@@ -521,12 +452,6 @@ instance ULift.completeSpace [h : CompleteSpace α] : CompleteSpace (ULift α) :
#align ulift.complete_space ULift.completeSpace
-/
-/- warning: complete_space_extension -> completeSpace_extension is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {m : β -> α}, (UniformInducing.{u2, u1} β α _inst_2 _inst_1 m) -> (DenseRange.{u1, u2} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) β m) -> (forall (f : Filter.{u2} β), (Cauchy.{u2} β _inst_2 f) -> (Exists.{succ u1} α (fun (x : α) => LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (Filter.map.{u2, u1} β α m f) (nhds.{u1} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) x)))) -> (CompleteSpace.{u1} α _inst_1)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {m : β -> α}, (UniformInducing.{u2, u1} β α _inst_2 _inst_1 m) -> (DenseRange.{u1, u2} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) β m) -> (forall (f : Filter.{u2} β), (Cauchy.{u2} β _inst_2 f) -> (Exists.{succ u1} α (fun (x : α) => LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (Filter.map.{u2, u1} β α m f) (nhds.{u1} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) x)))) -> (CompleteSpace.{u1} α _inst_1)
-Case conversion may be inaccurate. Consider using '#align complete_space_extension completeSpace_extensionₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -610,12 +535,6 @@ instance CompleteSpace.sum [CompleteSpace α] [CompleteSpace β] : CompleteSpace
end
-/- warning: uniform_embedding_comap -> uniformEmbedding_comap is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {f : α -> β} [u : UniformSpace.{u2} β], (Function.Injective.{succ u1, succ u2} α β f) -> (UniformEmbedding.{u1, u2} α β (UniformSpace.comap.{u1, u2} α β f u) u f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {f : α -> β} [u : UniformSpace.{u1} β], (Function.Injective.{succ u2, succ u1} α β f) -> (UniformEmbedding.{u2, u1} α β (UniformSpace.comap.{u2, u1} α β f u) u f)
-Case conversion may be inaccurate. Consider using '#align uniform_embedding_comap uniformEmbedding_comapₓ'. -/
theorem uniformEmbedding_comap {α : Type _} {β : Type _} {f : α → β} [u : UniformSpace β]
(hf : Function.Injective f) : @UniformEmbedding α β (UniformSpace.comap f u) u f :=
@UniformEmbedding.mk _ _ (UniformSpace.comap f u) _ _
@@ -631,12 +550,6 @@ def Embedding.comapUniformSpace {α β} [TopologicalSpace α] [u : UniformSpace
#align embedding.comap_uniform_space Embedding.comapUniformSpace
-/
-/- warning: embedding.to_uniform_embedding -> Embedding.to_uniformEmbedding is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [u : UniformSpace.{u2} β] (f : α -> β) (h : Embedding.{u1, u2} α β _inst_1 (UniformSpace.toTopologicalSpace.{u2} β u) f), UniformEmbedding.{u1, u2} α β (Embedding.comapUniformSpace.{u1, u2} α β _inst_1 u f h) u f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [u : UniformSpace.{u1} β] (f : α -> β) (h : Embedding.{u2, u1} α β _inst_1 (UniformSpace.toTopologicalSpace.{u1} β u) f), UniformEmbedding.{u2, u1} α β (Embedding.comapUniformSpace.{u2, u1} α β _inst_1 u f h) u f
-Case conversion may be inaccurate. Consider using '#align embedding.to_uniform_embedding Embedding.to_uniformEmbeddingₓ'. -/
theorem Embedding.to_uniformEmbedding {α β} [TopologicalSpace α] [u : UniformSpace β] (f : α → β)
(h : Embedding f) : @UniformEmbedding α β (h.comap_uniformSpace f) u f :=
{ comap_uniformity := rfl
@@ -663,12 +576,6 @@ theorem uniformly_extend_exists [CompleteSpace γ] (a : α) : ∃ c, Tendsto f (
#align uniformly_extend_exists uniformly_extend_exists
-/
-/- warning: uniform_extend_subtype -> uniform_extend_subtype is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] [_inst_3 : UniformSpace.{u3} γ] [_inst_4 : CompleteSpace.{u3} γ _inst_3] {p : α -> Prop} {e : α -> β} {f : α -> γ} {b : β} {s : Set.{u1} α}, (UniformContinuous.{u1, u3} (Subtype.{succ u1} α p) γ (Subtype.uniformSpace.{u1} α p _inst_1) _inst_3 (fun (x : Subtype.{succ u1} α p) => f (Subtype.val.{succ u1} α p x))) -> (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 e) -> (forall (x : β), Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) x (closure.{u2} β (UniformSpace.toTopologicalSpace.{u2} β _inst_2) (Set.range.{u2, succ u1} β α e))) -> (Membership.Mem.{u2, u2} (Set.{u2} β) (Filter.{u2} β) (Filter.hasMem.{u2} β) (closure.{u2} β (UniformSpace.toTopologicalSpace.{u2} β _inst_2) (Set.image.{u1, u2} α β e s)) (nhds.{u2} β (UniformSpace.toTopologicalSpace.{u2} β _inst_2) b)) -> (IsClosed.{u1} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) s) -> (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (p x)) -> (Exists.{succ u3} γ (fun (c : γ) => Filter.Tendsto.{u1, u3} α γ f (Filter.comap.{u1, u2} α β e (nhds.{u2} β (UniformSpace.toTopologicalSpace.{u2} β _inst_2) b)) (nhds.{u3} γ (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) c)))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : UniformSpace.{u2} α] [_inst_2 : UniformSpace.{u1} β] [_inst_3 : UniformSpace.{u3} γ] [_inst_4 : CompleteSpace.{u3} γ _inst_3] {p : α -> Prop} {e : α -> β} {f : α -> γ} {b : β} {s : Set.{u2} α}, (UniformContinuous.{u2, u3} (Subtype.{succ u2} α p) γ (instUniformSpaceSubtype.{u2} α p _inst_1) _inst_3 (fun (x : Subtype.{succ u2} α p) => f (Subtype.val.{succ u2} α p x))) -> (UniformEmbedding.{u2, u1} α β _inst_1 _inst_2 e) -> (forall (x : β), Membership.mem.{u1, u1} β (Set.{u1} β) (Set.instMembershipSet.{u1} β) x (closure.{u1} β (UniformSpace.toTopologicalSpace.{u1} β _inst_2) (Set.range.{u1, succ u2} β α e))) -> (Membership.mem.{u1, u1} (Set.{u1} β) (Filter.{u1} β) (instMembershipSetFilter.{u1} β) (closure.{u1} β (UniformSpace.toTopologicalSpace.{u1} β _inst_2) (Set.image.{u2, u1} α β e s)) (nhds.{u1} β (UniformSpace.toTopologicalSpace.{u1} β _inst_2) b)) -> (IsClosed.{u2} α (UniformSpace.toTopologicalSpace.{u2} α _inst_1) s) -> (forall (x : α), (Membership.mem.{u2, u2} α (Set.{u2} α) (Set.instMembershipSet.{u2} α) x s) -> (p x)) -> (Exists.{succ u3} γ (fun (c : γ) => Filter.Tendsto.{u2, u3} α γ f (Filter.comap.{u2, u1} α β e (nhds.{u1} β (UniformSpace.toTopologicalSpace.{u1} β _inst_2) b)) (nhds.{u3} γ (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) c)))
-Case conversion may be inaccurate. Consider using '#align uniform_extend_subtype uniform_extend_subtypeₓ'. -/
theorem uniform_extend_subtype [CompleteSpace γ] {p : α → Prop} {e : α → β} {f : α → γ} {b : β}
{s : Set α} (hf : UniformContinuous fun x : Subtype p => f x.val) (he : UniformEmbedding e)
(hd : ∀ x : β, x ∈ closure (range e)) (hb : closure (e '' s) ∈ 𝓝 b) (hs : IsClosed s)
@@ -706,12 +613,6 @@ theorem uniformly_extend_spec [CompleteSpace γ] (a : α) : Tendsto f (comap e (
#align uniformly_extend_spec uniformly_extend_spec
-/
-/- warning: uniform_continuous_uniformly_extend -> uniformContinuous_uniformly_extend is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] [_inst_3 : UniformSpace.{u3} γ] {e : β -> α} (h_e : UniformInducing.{u2, u1} β α _inst_2 _inst_1 e) (h_dense : DenseRange.{u1, u2} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) β e) {f : β -> γ}, (UniformContinuous.{u2, u3} β γ _inst_2 _inst_3 f) -> (forall [cγ : CompleteSpace.{u3} γ _inst_3], UniformContinuous.{u1, u3} α γ _inst_1 _inst_3 (DenseInducing.extend.{u2, u1, u3} β α γ (UniformSpace.toTopologicalSpace.{u2} β _inst_2) (UniformSpace.toTopologicalSpace.{u1} α _inst_1) e (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) (UniformInducing.denseInducing.{u2, u1} β α _inst_2 _inst_1 e h_e h_dense) f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : UniformSpace.{u2} α] [_inst_2 : UniformSpace.{u1} β] [_inst_3 : UniformSpace.{u3} γ] {e : β -> α} (h_e : UniformInducing.{u1, u2} β α _inst_2 _inst_1 e) (h_dense : DenseRange.{u2, u1} α (UniformSpace.toTopologicalSpace.{u2} α _inst_1) β e) {f : β -> γ}, (UniformContinuous.{u1, u3} β γ _inst_2 _inst_3 f) -> (forall [cγ : CompleteSpace.{u3} γ _inst_3], UniformContinuous.{u2, u3} α γ _inst_1 _inst_3 (DenseInducing.extend.{u1, u2, u3} β α γ (UniformSpace.toTopologicalSpace.{u1} β _inst_2) (UniformSpace.toTopologicalSpace.{u2} α _inst_1) e (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) (UniformInducing.denseInducing.{u1, u2} β α _inst_2 _inst_1 e h_e h_dense) f))
-Case conversion may be inaccurate. Consider using '#align uniform_continuous_uniformly_extend uniformContinuous_uniformly_extendₓ'. -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -773,12 +674,6 @@ theorem uniformly_extend_of_ind (b : β) : ψ (e b) = f b :=
#align uniformly_extend_of_ind uniformly_extend_of_ind
-/
-/- warning: uniformly_extend_unique -> uniformly_extend_unique is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] [_inst_3 : UniformSpace.{u3} γ] {e : β -> α} (h_e : UniformInducing.{u2, u1} β α _inst_2 _inst_1 e) (h_dense : DenseRange.{u1, u2} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) β e) {f : β -> γ} [_inst_4 : SeparatedSpace.{u3} γ _inst_3] {g : α -> γ}, (forall (b : β), Eq.{succ u3} γ (g (e b)) (f b)) -> (Continuous.{u1, u3} α γ (UniformSpace.toTopologicalSpace.{u1} α _inst_1) (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) g) -> (Eq.{max (succ u1) (succ u3)} (α -> γ) (DenseInducing.extend.{u2, u1, u3} β α γ (UniformSpace.toTopologicalSpace.{u2} β _inst_2) (UniformSpace.toTopologicalSpace.{u1} α _inst_1) e (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) (UniformInducing.denseInducing.{u2, u1} β α _inst_2 _inst_1 e h_e h_dense) f) g)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_1 : UniformSpace.{u2} α] [_inst_2 : UniformSpace.{u1} β] [_inst_3 : UniformSpace.{u3} γ] {e : β -> α} (h_e : UniformInducing.{u1, u2} β α _inst_2 _inst_1 e) (h_dense : DenseRange.{u2, u1} α (UniformSpace.toTopologicalSpace.{u2} α _inst_1) β e) {f : β -> γ} [_inst_4 : SeparatedSpace.{u3} γ _inst_3] {g : α -> γ}, (forall (b : β), Eq.{succ u3} γ (g (e b)) (f b)) -> (Continuous.{u2, u3} α γ (UniformSpace.toTopologicalSpace.{u2} α _inst_1) (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) g) -> (Eq.{max (succ u2) (succ u3)} (α -> γ) (DenseInducing.extend.{u1, u2, u3} β α γ (UniformSpace.toTopologicalSpace.{u1} β _inst_2) (UniformSpace.toTopologicalSpace.{u2} α _inst_1) e (UniformSpace.toTopologicalSpace.{u3} γ _inst_3) (UniformInducing.denseInducing.{u1, u2} β α _inst_2 _inst_1 e h_e h_dense) f) g)
-Case conversion may be inaccurate. Consider using '#align uniformly_extend_unique uniformly_extend_uniqueₓ'. -/
theorem uniformly_extend_unique {g : α → γ} (hg : ∀ b, g (e b) = f b) (hc : Continuous g) : ψ = g :=
DenseInducing.extend_unique _ hg hc
#align uniformly_extend_unique uniformly_extend_unique
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -247,10 +247,7 @@ theorem uniformEmbedding_subtype_val {p : α → Prop} : UniformEmbedding (coe :
#print uniformEmbedding_set_inclusion /-
theorem uniformEmbedding_set_inclusion {s t : Set α} (hst : s ⊆ t) :
UniformEmbedding (inclusion hst) :=
- { comap_uniformity :=
- by
- erw [uniformity_subtype, uniformity_subtype, comap_comap]
- congr
+ { comap_uniformity := by erw [uniformity_subtype, uniformity_subtype, comap_comap]; congr
inj := inclusion_injective hst }
#align uniform_embedding_set_inclusion uniformEmbedding_set_inclusion
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -66,10 +66,7 @@ theorem uniformInducing_iff' {f : α → β} :
#align uniform_inducing_iff' uniformInducing_iff'
/- warning: filter.has_basis.uniform_inducing_iff -> Filter.HasBasis.uniformInducing_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {ι : Sort.{u3}} {ι' : Sort.{u4}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u1} (Prod.{u1, u1} α α))} {s' : ι' -> (Set.{u2} (Prod.{u2, u2} β β))}, (Filter.HasBasis.{u1, u3} (Prod.{u1, u1} α α) ι (uniformity.{u1} α _inst_1) p s) -> (Filter.HasBasis.{u2, u4} (Prod.{u2, u2} β β) ι' (uniformity.{u2} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (forall (i : ι'), (p' i) -> (Exists.{u3} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)) -> (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u4} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j))))))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {ι : Sort.{u2}} {ι' : Sort.{u1}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u3} (Prod.{u3, u3} α α))} {s' : ι' -> (Set.{u4} (Prod.{u4, u4} β β))}, (Filter.HasBasis.{u3, u2} (Prod.{u3, u3} α α) ι (uniformity.{u3} α _inst_1) p s) -> (Filter.HasBasis.{u4, u1} (Prod.{u4, u4} β β) ι' (uniformity.{u4} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformInducing.{u3, u4} α β _inst_1 _inst_2 f) (And (forall (i : ι'), (p' i) -> (Exists.{u2} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)) -> (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u1} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)) -> (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j))))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_inducing_iff Filter.HasBasis.uniformInducing_iffₓ'. -/
protected theorem Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
@@ -209,10 +206,7 @@ theorem uniformEmbedding_iff' {f : α → β} :
#align uniform_embedding_iff' uniformEmbedding_iff'
/- warning: filter.has_basis.uniform_embedding_iff' -> Filter.HasBasis.uniformEmbedding_iff' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {ι : Sort.{u3}} {ι' : Sort.{u4}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u1} (Prod.{u1, u1} α α))} {s' : ι' -> (Set.{u2} (Prod.{u2, u2} β β))}, (Filter.HasBasis.{u1, u3} (Prod.{u1, u1} α α) ι (uniformity.{u1} α _inst_1) p s) -> (Filter.HasBasis.{u2, u4} (Prod.{u2, u2} β β) ι' (uniformity.{u2} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (forall (i : ι'), (p' i) -> (Exists.{u3} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)) -> (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u4} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)))))))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {ι : Sort.{u2}} {ι' : Sort.{u1}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u3} (Prod.{u3, u3} α α))} {s' : ι' -> (Set.{u4} (Prod.{u4, u4} β β))}, (Filter.HasBasis.{u3, u2} (Prod.{u3, u3} α α) ι (uniformity.{u3} α _inst_1) p s) -> (Filter.HasBasis.{u4, u1} (Prod.{u4, u4} β β) ι' (uniformity.{u4} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u3, u4} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u3, succ u4} α β f) (And (forall (i : ι'), (p' i) -> (Exists.{u2} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)) -> (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u1} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)) -> (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)))))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'ₓ'. -/
theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
@@ -224,10 +218,7 @@ theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' :
#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'
/- warning: filter.has_basis.uniform_embedding_iff -> Filter.HasBasis.uniformEmbedding_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {ι : Sort.{u3}} {ι' : Sort.{u4}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u1} (Prod.{u1, u1} α α))} {s' : ι' -> (Set.{u2} (Prod.{u2, u2} β β))}, (Filter.HasBasis.{u1, u3} (Prod.{u1, u1} α α) ι (uniformity.{u1} α _inst_1) p s) -> (Filter.HasBasis.{u2, u4} (Prod.{u2, u2} β β) ι' (uniformity.{u2} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (forall (j : ι), (p j) -> (Exists.{u4} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)))))))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {ι : Sort.{u2}} {ι' : Sort.{u1}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u3} (Prod.{u3, u3} α α))} {s' : ι' -> (Set.{u4} (Prod.{u4, u4} β β))}, (Filter.HasBasis.{u3, u2} (Prod.{u3, u3} α α) ι (uniformity.{u3} α _inst_1) p s) -> (Filter.HasBasis.{u4, u1} (Prod.{u4, u4} β β) ι' (uniformity.{u4} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u3, u4} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u3, succ u4} α β f) (And (UniformContinuous.{u3, u4} α β _inst_1 _inst_2 f) (forall (j : ι), (p j) -> (Exists.{u1} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)) -> (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)))))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_embedding_iff Filter.HasBasis.uniformEmbedding_iffₓ'. -/
theorem Filter.HasBasis.uniformEmbedding_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -275,7 +275,7 @@ theorem UniformEmbedding.comp {g : β → γ} (hg : UniformEmbedding g) {f : α
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] (f : Equiv.{succ u1, succ u2} α β), (UniformContinuous.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f)) -> (UniformContinuous.{u2, u1} β α _inst_5 _inst_4 (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} β α) (fun (_x : Equiv.{succ u2, succ u1} β α) => β -> α) (Equiv.hasCoeToFun.{succ u2, succ u1} β α) (Equiv.symm.{succ u1, succ u2} α β f))) -> (UniformEmbedding.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] (f : Equiv.{succ u2, succ u1} α β), (UniformContinuous.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f)) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} β α) β (fun (_x : β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : β) => α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} β α) (Equiv.symm.{succ u2, succ u1} α β f))) -> (UniformEmbedding.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] (f : Equiv.{succ u2, succ u1} α β), (UniformContinuous.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f)) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} β α) β (fun (_x : β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : β) => α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} β α) (Equiv.symm.{succ u2, succ u1} α β f))) -> (UniformEmbedding.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f))
Case conversion may be inaccurate. Consider using '#align equiv.uniform_embedding Equiv.uniformEmbeddingₓ'. -/
theorem Equiv.uniformEmbedding {α β : Type _} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
(h₁ : UniformContinuous f) (h₂ : UniformContinuous f.symm) : UniformEmbedding f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -56,7 +56,7 @@ protected theorem UniformInducing.comap_uniformSpace {f : α → β} (hf : Unifo
/- warning: uniform_inducing_iff' -> uniformInducing_iff' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1)))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toHasLe.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1)))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.instPartialOrderFilter.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing_iff' uniformInducing_iff'ₓ'. -/
@@ -199,7 +199,7 @@ structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop wher
/- warning: uniform_embedding_iff' -> uniformEmbedding_iff' is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1))))
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toHasLe.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1))))
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.instPartialOrderFilter.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1))))
Case conversion may be inaccurate. Consider using '#align uniform_embedding_iff' uniformEmbedding_iff'ₓ'. -/
@@ -535,7 +535,7 @@ instance ULift.completeSpace [h : CompleteSpace α] : CompleteSpace (ULift α) :
/- warning: complete_space_extension -> completeSpace_extension is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {m : β -> α}, (UniformInducing.{u2, u1} β α _inst_2 _inst_1 m) -> (DenseRange.{u1, u2} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) β m) -> (forall (f : Filter.{u2} β), (Cauchy.{u2} β _inst_2 f) -> (Exists.{succ u1} α (fun (x : α) => LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (Filter.map.{u2, u1} β α m f) (nhds.{u1} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) x)))) -> (CompleteSpace.{u1} α _inst_1)
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {m : β -> α}, (UniformInducing.{u2, u1} β α _inst_2 _inst_1 m) -> (DenseRange.{u1, u2} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) β m) -> (forall (f : Filter.{u2} β), (Cauchy.{u2} β _inst_2 f) -> (Exists.{succ u1} α (fun (x : α) => LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) (Filter.map.{u2, u1} β α m f) (nhds.{u1} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) x)))) -> (CompleteSpace.{u1} α _inst_1)
but is expected to have type
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {m : β -> α}, (UniformInducing.{u2, u1} β α _inst_2 _inst_1 m) -> (DenseRange.{u1, u2} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) β m) -> (forall (f : Filter.{u2} β), (Cauchy.{u2} β _inst_2 f) -> (Exists.{succ u1} α (fun (x : α) => LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.instPartialOrderFilter.{u1} α))) (Filter.map.{u2, u1} β α m f) (nhds.{u1} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1) x)))) -> (CompleteSpace.{u1} α _inst_1)
Case conversion may be inaccurate. Consider using '#align complete_space_extension completeSpace_extensionₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -550,10 +550,10 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
have mp₀ : Monotone p := fun a b h t s ⟨x, xs, xa⟩ => ⟨x, xs, h xa⟩
have mp₁ : ∀ {s}, Monotone (p s) := fun s a b h x ⟨y, ya, yxs⟩ => ⟨y, h ya, yxs⟩
have : f ≤ g :=
- le_infᵢ fun s =>
- le_infᵢ fun hs =>
- le_infᵢ fun t =>
- le_infᵢ fun ht =>
+ le_iInf fun s =>
+ le_iInf fun hs =>
+ le_iInf fun t =>
+ le_iInf fun ht =>
le_principal_iff.mpr <| mem_of_superset ht fun x hx => ⟨x, hx, refl_mem_uniformity hs⟩
have : NeBot g := hf.left.mono this
have : NeBot (comap m g) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -275,7 +275,7 @@ theorem UniformEmbedding.comp {g : β → γ} (hg : UniformEmbedding g) {f : α
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] (f : Equiv.{succ u1, succ u2} α β), (UniformContinuous.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f)) -> (UniformContinuous.{u2, u1} β α _inst_5 _inst_4 (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} β α) (fun (_x : Equiv.{succ u2, succ u1} β α) => β -> α) (Equiv.hasCoeToFun.{succ u2, succ u1} β α) (Equiv.symm.{succ u1, succ u2} α β f))) -> (UniformEmbedding.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f))
but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] (f : Equiv.{succ u2, succ u1} α β), (UniformContinuous.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f)) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} β α) β (fun (_x : β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : β) => α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} β α) (Equiv.symm.{succ u2, succ u1} α β f))) -> (UniformEmbedding.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f))
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] (f : Equiv.{succ u2, succ u1} α β), (UniformContinuous.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f)) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} β α) β (fun (_x : β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : β) => α) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} β α) (Equiv.symm.{succ u2, succ u1} α β f))) -> (UniformEmbedding.{u2, u1} α β _inst_4 _inst_5 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} α β) α (fun (_x : α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α) => β) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} α β) f))
Case conversion may be inaccurate. Consider using '#align equiv.uniform_embedding Equiv.uniformEmbeddingₓ'. -/
theorem Equiv.uniformEmbedding {α β : Type _} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
(h₁ : UniformContinuous f) (h₂ : UniformContinuous f.symm) : UniformEmbedding f :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -47,16 +47,30 @@ structure UniformInducing (f : α → β) : Prop where
#align uniform_inducing UniformInducing
-/
+#print UniformInducing.comap_uniformSpace /-
protected theorem UniformInducing.comap_uniformSpace {f : α → β} (hf : UniformInducing f) :
‹UniformSpace β›.comap f = ‹UniformSpace α› :=
uniformSpace_eq hf.1
#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
+-/
+/- warning: uniform_inducing_iff' -> uniformInducing_iff' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1)))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.instPartialOrderFilter.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1)))
+Case conversion may be inaccurate. Consider using '#align uniform_inducing_iff' uniformInducing_iff'ₓ'. -/
theorem uniformInducing_iff' {f : α → β} :
UniformInducing f ↔ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
rw [uniformInducing_iff, UniformContinuous, tendsto_iff_comap, le_antisymm_iff, and_comm'] <;> rfl
#align uniform_inducing_iff' uniformInducing_iff'
+/- warning: filter.has_basis.uniform_inducing_iff -> Filter.HasBasis.uniformInducing_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {ι : Sort.{u3}} {ι' : Sort.{u4}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u1} (Prod.{u1, u1} α α))} {s' : ι' -> (Set.{u2} (Prod.{u2, u2} β β))}, (Filter.HasBasis.{u1, u3} (Prod.{u1, u1} α α) ι (uniformity.{u1} α _inst_1) p s) -> (Filter.HasBasis.{u2, u4} (Prod.{u2, u2} β β) ι' (uniformity.{u2} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) (And (forall (i : ι'), (p' i) -> (Exists.{u3} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)) -> (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u4} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {ι : Sort.{u2}} {ι' : Sort.{u1}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u3} (Prod.{u3, u3} α α))} {s' : ι' -> (Set.{u4} (Prod.{u4, u4} β β))}, (Filter.HasBasis.{u3, u2} (Prod.{u3, u3} α α) ι (uniformity.{u3} α _inst_1) p s) -> (Filter.HasBasis.{u4, u1} (Prod.{u4, u4} β β) ι' (uniformity.{u4} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformInducing.{u3, u4} α β _inst_1 _inst_2 f) (And (forall (i : ι'), (p' i) -> (Exists.{u2} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)) -> (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u1} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)) -> (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j))))))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_inducing_iff Filter.HasBasis.uniformInducing_iffₓ'. -/
protected theorem Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformInducing f ↔
@@ -167,10 +181,12 @@ theorem UniformInducing.denseInducing {f : α → β} (h : UniformInducing f) (h
#align uniform_inducing.dense_inducing UniformInducing.denseInducing
-/
+#print UniformInducing.injective /-
protected theorem UniformInducing.injective [T0Space α] {f : α → β} (h : UniformInducing f) :
Injective f :=
h.Inducing.Injective
#align uniform_inducing.injective UniformInducing.injective
+-/
#print UniformEmbedding /-
/-- A map `f : α → β` between uniform spaces is a *uniform embedding* if it is uniform inducing and
@@ -181,11 +197,23 @@ structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop wher
#align uniform_embedding UniformEmbedding
-/
+/- warning: uniform_embedding_iff' -> uniformEmbedding_iff' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.partialOrder.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1))))
+but is expected to have type
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (LE.le.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Preorder.toLE.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (PartialOrder.toPreorder.{u1} (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.instPartialOrderFilter.{u1} (Prod.{u1, u1} α α)))) (Filter.comap.{u1, u2} (Prod.{u1, u1} α α) (Prod.{u2, u2} β β) (Prod.map.{u1, u2, u1, u2} α β α β f f) (uniformity.{u2} β _inst_2)) (uniformity.{u1} α _inst_1))))
+Case conversion may be inaccurate. Consider using '#align uniform_embedding_iff' uniformEmbedding_iff'ₓ'. -/
theorem uniformEmbedding_iff' {f : α → β} :
UniformEmbedding f ↔ Injective f ∧ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
rw [uniformEmbedding_iff, and_comm', uniformInducing_iff']
#align uniform_embedding_iff' uniformEmbedding_iff'
+/- warning: filter.has_basis.uniform_embedding_iff' -> Filter.HasBasis.uniformEmbedding_iff' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {ι : Sort.{u3}} {ι' : Sort.{u4}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u1} (Prod.{u1, u1} α α))} {s' : ι' -> (Set.{u2} (Prod.{u2, u2} β β))}, (Filter.HasBasis.{u1, u3} (Prod.{u1, u1} α α) ι (uniformity.{u1} α _inst_1) p s) -> (Filter.HasBasis.{u2, u4} (Prod.{u2, u2} β β) ι' (uniformity.{u2} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (forall (i : ι'), (p' i) -> (Exists.{u3} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)) -> (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u4} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {ι : Sort.{u2}} {ι' : Sort.{u1}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u3} (Prod.{u3, u3} α α))} {s' : ι' -> (Set.{u4} (Prod.{u4, u4} β β))}, (Filter.HasBasis.{u3, u2} (Prod.{u3, u3} α α) ι (uniformity.{u3} α _inst_1) p s) -> (Filter.HasBasis.{u4, u1} (Prod.{u4, u4} β β) ι' (uniformity.{u4} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u3, u4} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u3, succ u4} α β f) (And (forall (i : ι'), (p' i) -> (Exists.{u2} ι (fun (j : ι) => And (p j) (forall (x : α) (y : α), (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)) -> (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)))))) (forall (j : ι), (p j) -> (Exists.{u1} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)) -> (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)))))))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'ₓ'. -/
theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformEmbedding f ↔
@@ -195,6 +223,12 @@ theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' :
by rw [uniformEmbedding_iff, and_comm', h.uniform_inducing_iff h']
#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'
+/- warning: filter.has_basis.uniform_embedding_iff -> Filter.HasBasis.uniformEmbedding_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {ι : Sort.{u3}} {ι' : Sort.{u4}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u1} (Prod.{u1, u1} α α))} {s' : ι' -> (Set.{u2} (Prod.{u2, u2} β β))}, (Filter.HasBasis.{u1, u3} (Prod.{u1, u1} α α) ι (uniformity.{u1} α _inst_1) p s) -> (Filter.HasBasis.{u2, u4} (Prod.{u2, u2} β β) ι' (uniformity.{u2} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (forall (j : ι), (p j) -> (Exists.{u4} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) (s' i)) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) (s j)))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {ι : Sort.{u2}} {ι' : Sort.{u1}} {p : ι -> Prop} {p' : ι' -> Prop} {s : ι -> (Set.{u3} (Prod.{u3, u3} α α))} {s' : ι' -> (Set.{u4} (Prod.{u4, u4} β β))}, (Filter.HasBasis.{u3, u2} (Prod.{u3, u3} α α) ι (uniformity.{u3} α _inst_1) p s) -> (Filter.HasBasis.{u4, u1} (Prod.{u4, u4} β β) ι' (uniformity.{u4} β _inst_2) p' s') -> (forall {f : α -> β}, Iff (UniformEmbedding.{u3, u4} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u3, succ u4} α β f) (And (UniformContinuous.{u3, u4} α β _inst_1 _inst_2 f) (forall (j : ι), (p j) -> (Exists.{u1} ι' (fun (i : ι') => And (p' i) (forall (x : α) (y : α), (Membership.mem.{u4, u4} (Prod.{u4, u4} β β) (Set.{u4} (Prod.{u4, u4} β β)) (Set.instMembershipSet.{u4} (Prod.{u4, u4} β β)) (Prod.mk.{u4, u4} β β (f x) (f y)) (s' i)) -> (Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α x y) (s j)))))))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_embedding_iff Filter.HasBasis.uniformEmbedding_iffₓ'. -/
theorem Filter.HasBasis.uniformEmbedding_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
(h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
UniformEmbedding f ↔
@@ -279,10 +313,12 @@ protected theorem UniformInducing.uniformEmbedding [T0Space α] {f : α → β}
#align uniform_inducing.uniform_embedding UniformInducing.uniformEmbedding
-/
+#print uniformEmbedding_iff_uniformInducing /-
theorem uniformEmbedding_iff_uniformInducing [T0Space α] {f : α → β} :
UniformEmbedding f ↔ UniformInducing f :=
⟨UniformEmbedding.to_uniformInducing, UniformInducing.uniformEmbedding⟩
#align uniform_embedding_iff_uniform_inducing uniformEmbedding_iff_uniformInducing
+-/
/- warning: comap_uniformity_of_spaced_out -> comap_uniformity_of_spaced_out is a dubious translation:
lean 3 declaration is
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Sébastien Gouëzel, Patrick Massot
! This file was ported from Lean 3 source module topology.uniform_space.uniform_embedding
-! leanprover-community/mathlib commit 0a0ec35061ed9960bf0e7ffb0335f44447b58977
+! leanprover-community/mathlib commit 195fcd60ff2bfe392543bceb0ec2adcdb472db4c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -22,7 +22,7 @@ Extension of uniform continuous functions.
-/
-open Filter TopologicalSpace Set Classical
+open Filter TopologicalSpace Set Function Classical
open Classical uniformity Topology Filter
@@ -32,15 +32,40 @@ variable {α : Type _} {β : Type _} {γ : Type _} [UniformSpace α] [UniformSpa
universe u v
+/-!
+### Uniform inducing maps
+-/
+
+
#print UniformInducing /-
/-- A map `f : α → β` between uniform spaces is called *uniform inducing* if the uniformity filter
on `α` is the pullback of the uniformity filter on `β` under `prod.map f f`. If `α` is a separated
space, then this implies that `f` is injective, hence it is a `uniform_embedding`. -/
+@[mk_iff]
structure UniformInducing (f : α → β) : Prop where
comap_uniformity : comap (fun x : α × α => (f x.1, f x.2)) (𝓤 β) = 𝓤 α
#align uniform_inducing UniformInducing
-/
+protected theorem UniformInducing.comap_uniformSpace {f : α → β} (hf : UniformInducing f) :
+ ‹UniformSpace β›.comap f = ‹UniformSpace α› :=
+ uniformSpace_eq hf.1
+#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
+
+theorem uniformInducing_iff' {f : α → β} :
+ UniformInducing f ↔ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
+ rw [uniformInducing_iff, UniformContinuous, tendsto_iff_comap, le_antisymm_iff, and_comm'] <;> rfl
+#align uniform_inducing_iff' uniformInducing_iff'
+
+protected theorem Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
+ UniformInducing f ↔
+ (∀ i, p' i → ∃ j, p j ∧ ∀ x y, (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
+ ∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j :=
+ by
+ simp [uniformInducing_iff', h.uniform_continuous_iff h', (h'.comap _).le_basis_iffₓ h, subset_def]
+#align filter.has_basis.uniform_inducing_iff Filter.HasBasis.uniformInducing_iff
+
/- warning: uniform_inducing.mk' -> UniformInducing.mk' is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, (forall (s : Set.{u1} (Prod.{u1, u1} α α)), Iff (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) s (uniformity.{u1} α _inst_1)) (Exists.{succ u2} (Set.{u2} (Prod.{u2, u2} β β)) (fun (t : Set.{u2} (Prod.{u2, u2} β β)) => Exists.{0} (Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) (fun (H : Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) => forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) t) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) s))))) -> (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f)
@@ -61,12 +86,7 @@ theorem uniformInducing_id : UniformInducing (@id α) :=
#print UniformInducing.comp /-
theorem UniformInducing.comp {g : β → γ} (hg : UniformInducing g) {f : α → β}
(hf : UniformInducing f) : UniformInducing (g ∘ f) :=
- ⟨by
- rw [show
- (fun x : α × α => ((g ∘ f) x.1, (g ∘ f) x.2)) =
- (fun y : β × β => (g y.1, g y.2)) ∘ fun x : α × α => (f x.1, f x.2)
- by ext <;> simp,
- ← Filter.comap_comap, hg.1, hf.1]⟩
+ ⟨by rw [← hf.1, ← hg.1, comap_comap]⟩
#align uniform_inducing.comp UniformInducing.comp
-/
@@ -100,14 +120,89 @@ theorem uniformInducing_of_compose {f : α → β} {g : β → γ} (hf : Uniform
#align uniform_inducing_of_compose uniformInducing_of_compose
-/
+#print UniformInducing.uniformContinuous /-
+theorem UniformInducing.uniformContinuous {f : α → β} (hf : UniformInducing f) :
+ UniformContinuous f :=
+ (uniformInducing_iff'.1 hf).1
+#align uniform_inducing.uniform_continuous UniformInducing.uniformContinuous
+-/
+
+#print UniformInducing.uniformContinuous_iff /-
+theorem UniformInducing.uniformContinuous_iff {f : α → β} {g : β → γ} (hg : UniformInducing g) :
+ UniformContinuous f ↔ UniformContinuous (g ∘ f) :=
+ by
+ dsimp only [UniformContinuous, tendsto]
+ rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map]
+#align uniform_inducing.uniform_continuous_iff UniformInducing.uniformContinuous_iff
+-/
+
+#print UniformInducing.inducing /-
+protected theorem UniformInducing.inducing {f : α → β} (h : UniformInducing f) : Inducing f :=
+ by
+ obtain rfl := h.comap_uniform_space
+ letI := UniformSpace.comap f _
+ exact ⟨rfl⟩
+#align uniform_inducing.inducing UniformInducing.inducing
+-/
+
+/- warning: uniform_inducing.prod -> UniformInducing.prod is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {α' : Type.{u3}} {β' : Type.{u4}} [_inst_4 : UniformSpace.{u3} α'] [_inst_5 : UniformSpace.{u4} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformInducing.{u1, u3} α α' _inst_1 _inst_4 e₁) -> (UniformInducing.{u2, u4} β β' _inst_2 _inst_5 e₂) -> (UniformInducing.{max u1 u2, max u3 u4} (Prod.{u1, u2} α β) (Prod.{u3, u4} α' β') (Prod.uniformSpace.{u1, u2} α β _inst_1 _inst_2) (Prod.uniformSpace.{u3, u4} α' β' _inst_4 _inst_5) (fun (p : Prod.{u1, u2} α β) => Prod.mk.{u3, u4} α' β' (e₁ (Prod.fst.{u1, u2} α β p)) (e₂ (Prod.snd.{u1, u2} α β p))))
+but is expected to have type
+ forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {α' : Type.{u2}} {β' : Type.{u1}} [_inst_4 : UniformSpace.{u2} α'] [_inst_5 : UniformSpace.{u1} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformInducing.{u3, u2} α α' _inst_1 _inst_4 e₁) -> (UniformInducing.{u4, u1} β β' _inst_2 _inst_5 e₂) -> (UniformInducing.{max u3 u4, max u1 u2} (Prod.{u3, u4} α β) (Prod.{u2, u1} α' β') (instUniformSpaceProd.{u3, u4} α β _inst_1 _inst_2) (instUniformSpaceProd.{u2, u1} α' β' _inst_4 _inst_5) (fun (p : Prod.{u3, u4} α β) => Prod.mk.{u2, u1} α' β' (e₁ (Prod.fst.{u3, u4} α β p)) (e₂ (Prod.snd.{u3, u4} α β p))))
+Case conversion may be inaccurate. Consider using '#align uniform_inducing.prod UniformInducing.prodₓ'. -/
+theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
+ {e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformInducing e₁) (h₂ : UniformInducing e₂) :
+ UniformInducing fun p : α × β => (e₁ p.1, e₂ p.2) :=
+ ⟨by
+ simp [(· ∘ ·), uniformity_prod, h₁.comap_uniformity.symm, h₂.comap_uniformity.symm, comap_inf,
+ comap_comap]⟩
+#align uniform_inducing.prod UniformInducing.prod
+
+#print UniformInducing.denseInducing /-
+theorem UniformInducing.denseInducing {f : α → β} (h : UniformInducing f) (hd : DenseRange f) :
+ DenseInducing f :=
+ { dense := hd
+ induced := h.Inducing.induced }
+#align uniform_inducing.dense_inducing UniformInducing.denseInducing
+-/
+
+protected theorem UniformInducing.injective [T0Space α] {f : α → β} (h : UniformInducing f) :
+ Injective f :=
+ h.Inducing.Injective
+#align uniform_inducing.injective UniformInducing.injective
+
#print UniformEmbedding /-
/-- A map `f : α → β` between uniform spaces is a *uniform embedding* if it is uniform inducing and
injective. If `α` is a separated space, then the latter assumption follows from the former. -/
+@[mk_iff]
structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop where
inj : Function.Injective f
#align uniform_embedding UniformEmbedding
-/
+theorem uniformEmbedding_iff' {f : α → β} :
+ UniformEmbedding f ↔ Injective f ∧ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
+ rw [uniformEmbedding_iff, and_comm', uniformInducing_iff']
+#align uniform_embedding_iff' uniformEmbedding_iff'
+
+theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
+ UniformEmbedding f ↔
+ Injective f ∧
+ (∀ i, p' i → ∃ j, p j ∧ ∀ x y, (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
+ ∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j :=
+ by rw [uniformEmbedding_iff, and_comm', h.uniform_inducing_iff h']
+#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'
+
+theorem Filter.HasBasis.uniformEmbedding_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
+ UniformEmbedding f ↔
+ Injective f ∧
+ UniformContinuous f ∧ ∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j :=
+ by simp only [h.uniform_embedding_iff' h', h.uniform_continuous_iff h', exists_prop]
+#align filter.has_basis.uniform_embedding_iff Filter.HasBasis.uniformEmbedding_iff
+
#print uniformEmbedding_subtype_val /-
theorem uniformEmbedding_subtype_val {p : α → Prop} :
UniformEmbedding (Subtype.val : Subtype p → α) :=
@@ -142,44 +237,6 @@ theorem UniformEmbedding.comp {g : β → γ} (hg : UniformEmbedding g) {f : α
#align uniform_embedding.comp UniformEmbedding.comp
-/
-/- warning: uniform_embedding_def -> uniformEmbedding_def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (forall (s : Set.{u1} (Prod.{u1, u1} α α)), Iff (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) s (uniformity.{u1} α _inst_1)) (Exists.{succ u2} (Set.{u2} (Prod.{u2, u2} β β)) (fun (t : Set.{u2} (Prod.{u2, u2} β β)) => Exists.{0} (Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) (fun (H : Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) => forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) t) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) s))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (forall (s : Set.{u1} (Prod.{u1, u1} α α)), Iff (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) s (uniformity.{u1} α _inst_1)) (Exists.{succ u2} (Set.{u2} (Prod.{u2, u2} β β)) (fun (t : Set.{u2} (Prod.{u2, u2} β β)) => And (Membership.mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (instMembershipSetFilter.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) (forall (x : α) (y : α), (Membership.mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) t) -> (Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) s))))))
-Case conversion may be inaccurate. Consider using '#align uniform_embedding_def uniformEmbedding_defₓ'. -/
-theorem uniformEmbedding_def {f : α → β} :
- UniformEmbedding f ↔
- Function.Injective f ∧ ∀ s, s ∈ 𝓤 α ↔ ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s :=
- by
- constructor
- · rintro ⟨⟨h⟩, h'⟩
- rw [eq_comm, Filter.ext_iff] at h
- simp [*, subset_def]
- · rintro ⟨h, h'⟩
- refine' UniformEmbedding.mk ⟨_⟩ h
- rw [eq_comm, Filter.ext_iff]
- simp [*, subset_def]
-#align uniform_embedding_def uniformEmbedding_def
-
-/- warning: uniform_embedding_def' -> uniformEmbedding_def' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (forall (s : Set.{u1} (Prod.{u1, u1} α α)), (Membership.Mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (Filter.hasMem.{u1} (Prod.{u1, u1} α α)) s (uniformity.{u1} α _inst_1)) -> (Exists.{succ u2} (Set.{u2} (Prod.{u2, u2} β β)) (fun (t : Set.{u2} (Prod.{u2, u2} β β)) => Exists.{0} (Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) (fun (H : Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (Filter.hasMem.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) => forall (x : α) (y : α), (Membership.Mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.hasMem.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) t) -> (Membership.Mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.hasMem.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) s)))))))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {f : α -> β}, Iff (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f) (And (Function.Injective.{succ u1, succ u2} α β f) (And (UniformContinuous.{u1, u2} α β _inst_1 _inst_2 f) (forall (s : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) s (uniformity.{u1} α _inst_1)) -> (Exists.{succ u2} (Set.{u2} (Prod.{u2, u2} β β)) (fun (t : Set.{u2} (Prod.{u2, u2} β β)) => And (Membership.mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} β β)) (Filter.{u2} (Prod.{u2, u2} β β)) (instMembershipSetFilter.{u2} (Prod.{u2, u2} β β)) t (uniformity.{u2} β _inst_2)) (forall (x : α) (y : α), (Membership.mem.{u2, u2} (Prod.{u2, u2} β β) (Set.{u2} (Prod.{u2, u2} β β)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} β β)) (Prod.mk.{u2, u2} β β (f x) (f y)) t) -> (Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α x y) s)))))))
-Case conversion may be inaccurate. Consider using '#align uniform_embedding_def' uniformEmbedding_def'ₓ'. -/
-theorem uniformEmbedding_def' {f : α → β} :
- UniformEmbedding f ↔
- Function.Injective f ∧
- UniformContinuous f ∧ ∀ s, s ∈ 𝓤 α → ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s :=
- by
- simp only [uniformEmbedding_def, uniformContinuous_def] <;>
- exact
- ⟨fun ⟨I, H⟩ => ⟨I, fun s su => (H _).2 ⟨s, su, fun x y => id⟩, fun s => (H s).1⟩,
- fun ⟨I, H₁, H₂⟩ =>
- ⟨I, fun s => ⟨H₂ s, fun ⟨t, tu, h⟩ => mem_of_superset (H₁ t tu) fun ⟨a, b⟩ => h a b⟩⟩⟩
-#align uniform_embedding_def' uniformEmbedding_def'
-
/- warning: equiv.uniform_embedding -> Equiv.uniformEmbedding is a dubious translation:
lean 3 declaration is
forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] (f : Equiv.{succ u1, succ u2} α β), (UniformContinuous.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f)) -> (UniformContinuous.{u2, u1} β α _inst_5 _inst_4 (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} β α) (fun (_x : Equiv.{succ u2, succ u1} β α) => β -> α) (Equiv.hasCoeToFun.{succ u2, succ u1} β α) (Equiv.symm.{succ u1, succ u2} α β f))) -> (UniformEmbedding.{u1, u2} α β _inst_4 _inst_5 (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} α β) (fun (_x : Equiv.{succ u1, succ u2} α β) => α -> β) (Equiv.hasCoeToFun.{succ u1, succ u2} α β) f))
@@ -188,68 +245,44 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align equiv.uniform_embedding Equiv.uniformEmbeddingₓ'. -/
theorem Equiv.uniformEmbedding {α β : Type _} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
(h₁ : UniformContinuous f) (h₂ : UniformContinuous f.symm) : UniformEmbedding f :=
- { comap_uniformity := by
- refine' le_antisymm _ _
- · change comap (f.prod_congr f) _ ≤ _
- rw [← map_equiv_symm (f.prod_congr f)]
- exact h₂
- · rw [← map_le_iff_le_comap]
- exact h₁
- inj := f.Injective }
+ uniformEmbedding_iff'.2 ⟨f.Injective, h₁, by rwa [← Equiv.prodCongr_apply, ← map_equiv_symm]⟩
#align equiv.uniform_embedding Equiv.uniformEmbedding
#print uniformEmbedding_inl /-
theorem uniformEmbedding_inl : UniformEmbedding (Sum.inl : α → Sum α β) :=
by
- apply uniformEmbedding_def.2 ⟨Sum.inl_injective, fun s => ⟨_, _⟩⟩
- · intro hs
- refine'
- ⟨(fun p : α × α => (Sum.inl p.1, Sum.inl p.2)) '' s ∪
- (fun p : β × β => (Sum.inr p.1, Sum.inr p.2)) '' univ,
- _, _⟩
- · exact union_mem_uniformity_sum hs univ_mem
- · simp
- · rintro ⟨t, ht, h't⟩
- simp only [Sum.uniformity, mem_sup, mem_map] at ht
- apply Filter.mem_of_superset ht.1
- rintro ⟨x, y⟩ hx
- exact h't _ _ hx
+ refine' ⟨⟨_⟩, Sum.inl_injective⟩
+ rw [Sum.uniformity, comap_sup, comap_map, comap_eq_bot_iff_compl_range.2 _, sup_bot_eq]
+ · refine' mem_map.2 (univ_mem' _)
+ simp
+ · exact sum.inl_injective.prod_map Sum.inl_injective
#align uniform_embedding_inl uniformEmbedding_inl
-/
#print uniformEmbedding_inr /-
theorem uniformEmbedding_inr : UniformEmbedding (Sum.inr : β → Sum α β) :=
by
- apply uniformEmbedding_def.2 ⟨Sum.inr_injective, fun s => ⟨_, _⟩⟩
- · intro hs
- refine'
- ⟨(fun p : α × α => (Sum.inl p.1, Sum.inl p.2)) '' univ ∪
- (fun p : β × β => (Sum.inr p.1, Sum.inr p.2)) '' s,
- _, _⟩
- · exact union_mem_uniformity_sum univ_mem hs
- · simp
- · rintro ⟨t, ht, h't⟩
- simp only [Sum.uniformity, mem_sup, mem_map] at ht
- apply Filter.mem_of_superset ht.2
- rintro ⟨x, y⟩ hx
- exact h't _ _ hx
+ refine' ⟨⟨_⟩, Sum.inr_injective⟩
+ rw [Sum.uniformity, comap_sup, comap_eq_bot_iff_compl_range.2 _, comap_map, bot_sup_eq]
+ · exact sum.inr_injective.prod_map Sum.inr_injective
+ · refine' mem_map.2 (univ_mem' _)
+ simp
#align uniform_embedding_inr uniformEmbedding_inr
-/
-/- warning: uniform_inducing.uniform_embedding -> UniformInducing.uniformEmbedding is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] [_inst_4 : SeparatedSpace.{u1} α _inst_1] {f : α -> β}, (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) -> (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] [_inst_4 : T0Space.{u1} α (UniformSpace.toTopologicalSpace.{u1} α _inst_1)] {f : α -> β}, (UniformInducing.{u1, u2} α β _inst_1 _inst_2 f) -> (UniformEmbedding.{u1, u2} α β _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.uniform_embedding UniformInducing.uniformEmbeddingₓ'. -/
+#print UniformInducing.uniformEmbedding /-
/-- If the domain of a `uniform_inducing` map `f` is a `separated_space`, then `f` is injective,
hence it is a `uniform_embedding`. -/
-protected theorem UniformInducing.uniformEmbedding [SeparatedSpace α] {f : α → β}
+protected theorem UniformInducing.uniformEmbedding [T0Space α] {f : α → β}
(hf : UniformInducing f) : UniformEmbedding f :=
- ⟨hf, fun x y h =>
- eq_of_uniformity_basis (hf.basis_uniformity (𝓤 β).basis_sets) fun s hs =>
- mem_preimage.2 <| mem_uniformity_of_eq hs h⟩
+ ⟨hf, hf.Injective⟩
#align uniform_inducing.uniform_embedding UniformInducing.uniformEmbedding
+-/
+
+theorem uniformEmbedding_iff_uniformInducing [T0Space α] {f : α → β} :
+ UniformEmbedding f ↔ UniformInducing f :=
+ ⟨UniformEmbedding.to_uniformInducing, UniformInducing.uniformEmbedding⟩
+#align uniform_embedding_iff_uniform_inducing uniformEmbedding_iff_uniformInducing
/- warning: comap_uniformity_of_spaced_out -> comap_uniformity_of_spaced_out is a dubious translation:
lean 3 declaration is
@@ -289,55 +322,8 @@ theorem uniformEmbedding_of_spaced_out {α} {f : α → β} {s : Set (β × β)}
exact UniformInducing.uniformEmbedding ⟨comap_uniformity_of_spaced_out hs hf⟩
#align uniform_embedding_of_spaced_out uniformEmbedding_of_spaced_out
-#print UniformInducing.uniformContinuous /-
-theorem UniformInducing.uniformContinuous {f : α → β} (hf : UniformInducing f) :
- UniformContinuous f := by simp [UniformContinuous, hf.comap_uniformity.symm, tendsto_comap]
-#align uniform_inducing.uniform_continuous UniformInducing.uniformContinuous
--/
-
-#print UniformInducing.uniformContinuous_iff /-
-theorem UniformInducing.uniformContinuous_iff {f : α → β} {g : β → γ} (hg : UniformInducing g) :
- UniformContinuous f ↔ UniformContinuous (g ∘ f) :=
- by
- dsimp only [UniformContinuous, tendsto]
- rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map]
-#align uniform_inducing.uniform_continuous_iff UniformInducing.uniformContinuous_iff
--/
-
-#print UniformInducing.inducing /-
-theorem UniformInducing.inducing {f : α → β} (h : UniformInducing f) : Inducing f :=
- by
- refine' ⟨eq_of_nhds_eq_nhds fun a => _⟩
- rw [nhds_induced, nhds_eq_uniformity, nhds_eq_uniformity, ← h.comap_uniformity, comap_lift'_eq,
- comap_lift'_eq2]
- exacts[rfl, monotone_preimage]
-#align uniform_inducing.inducing UniformInducing.inducing
--/
-
-/- warning: uniform_inducing.prod -> UniformInducing.prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : UniformSpace.{u1} α] [_inst_2 : UniformSpace.{u2} β] {α' : Type.{u3}} {β' : Type.{u4}} [_inst_4 : UniformSpace.{u3} α'] [_inst_5 : UniformSpace.{u4} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformInducing.{u1, u3} α α' _inst_1 _inst_4 e₁) -> (UniformInducing.{u2, u4} β β' _inst_2 _inst_5 e₂) -> (UniformInducing.{max u1 u2, max u3 u4} (Prod.{u1, u2} α β) (Prod.{u3, u4} α' β') (Prod.uniformSpace.{u1, u2} α β _inst_1 _inst_2) (Prod.uniformSpace.{u3, u4} α' β' _inst_4 _inst_5) (fun (p : Prod.{u1, u2} α β) => Prod.mk.{u3, u4} α' β' (e₁ (Prod.fst.{u1, u2} α β p)) (e₂ (Prod.snd.{u1, u2} α β p))))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : UniformSpace.{u3} α] [_inst_2 : UniformSpace.{u4} β] {α' : Type.{u2}} {β' : Type.{u1}} [_inst_4 : UniformSpace.{u2} α'] [_inst_5 : UniformSpace.{u1} β'] {e₁ : α -> α'} {e₂ : β -> β'}, (UniformInducing.{u3, u2} α α' _inst_1 _inst_4 e₁) -> (UniformInducing.{u4, u1} β β' _inst_2 _inst_5 e₂) -> (UniformInducing.{max u3 u4, max u1 u2} (Prod.{u3, u4} α β) (Prod.{u2, u1} α' β') (instUniformSpaceProd.{u3, u4} α β _inst_1 _inst_2) (instUniformSpaceProd.{u2, u1} α' β' _inst_4 _inst_5) (fun (p : Prod.{u3, u4} α β) => Prod.mk.{u2, u1} α' β' (e₁ (Prod.fst.{u3, u4} α β p)) (e₂ (Prod.snd.{u3, u4} α β p))))
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.prod UniformInducing.prodₓ'. -/
-theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
- {e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformInducing e₁) (h₂ : UniformInducing e₂) :
- UniformInducing fun p : α × β => (e₁ p.1, e₂ p.2) :=
- ⟨by
- simp [(· ∘ ·), uniformity_prod, h₁.comap_uniformity.symm, h₂.comap_uniformity.symm, comap_inf,
- comap_comap]⟩
-#align uniform_inducing.prod UniformInducing.prod
-
-#print UniformInducing.denseInducing /-
-theorem UniformInducing.denseInducing {f : α → β} (h : UniformInducing f) (hd : DenseRange f) :
- DenseInducing f :=
- { dense := hd
- induced := h.Inducing.induced }
-#align uniform_inducing.dense_inducing UniformInducing.denseInducing
--/
-
#print UniformEmbedding.embedding /-
-theorem UniformEmbedding.embedding {f : α → β} (h : UniformEmbedding f) : Embedding f :=
+protected theorem UniformEmbedding.embedding {f : α → β} (h : UniformEmbedding f) : Embedding f :=
{ induced := h.to_uniformInducing.Inducing.induced
inj := h.inj }
#align uniform_embedding.embedding UniformEmbedding.embedding
@@ -628,7 +614,7 @@ but is expected to have type
forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [u : UniformSpace.{u1} β] (f : α -> β) (h : Embedding.{u2, u1} α β _inst_1 (UniformSpace.toTopologicalSpace.{u1} β u) f), UniformEmbedding.{u2, u1} α β (Embedding.comapUniformSpace.{u2, u1} α β _inst_1 u f h) u f
Case conversion may be inaccurate. Consider using '#align embedding.to_uniform_embedding Embedding.to_uniformEmbeddingₓ'. -/
theorem Embedding.to_uniformEmbedding {α β} [TopologicalSpace α] [u : UniformSpace β] (f : α → β)
- (h : Embedding f) : @UniformEmbedding α β (h.comapUniformSpace f) u f :=
+ (h : Embedding f) : @UniformEmbedding α β (h.comap_uniformSpace f) u f :=
{ comap_uniformity := rfl
inj := h.inj }
#align embedding.to_uniform_embedding Embedding.to_uniformEmbedding
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -737,7 +737,7 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
have : (e ⁻¹' m₁) ×ˢ (e ⁻¹' m₂) ⊆ (fun p : β × β => (f p.1, f p.2)) ⁻¹' s :=
calc
_ ⊆ preimage (fun p : β × β => (e p.1, e p.2)) (interior t) := preimage_mono hm
- _ ⊆ preimage (fun p : β × β => (e p.1, e p.2)) t := preimage_mono interior_subset
+ _ ⊆ preimage (fun p : β × β => (e p.1, e p.2)) t := (preimage_mono interior_subset)
_ ⊆ preimage (fun p : β × β => (f p.1, f p.2)) s := ts
have : (f '' (e ⁻¹' m₁)) ×ˢ (f '' (e ⁻¹' m₂)) ⊆ s :=
@@ -746,7 +746,7 @@ theorem uniformContinuous_uniformly_extend [cγ : CompleteSpace γ] : UniformCon
(fun p : β × β => (f p.1, f p.2)) '' (e ⁻¹' m₁) ×ˢ (e ⁻¹' m₂) :=
prod_image_image_eq
_ ⊆ (fun p : β × β => (f p.1, f p.2)) '' ((fun p : β × β => (f p.1, f p.2)) ⁻¹' s) :=
- monotone_image this
+ (monotone_image this)
_ ⊆ s := image_preimage_subset _ _
have : (a, b) ∈ s := @this (a, b) ⟨ha₁, hb₁⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -286,7 +286,7 @@ theorem isComplete_of_complete_image {m : α → β} {s : Set α} (hm : UniformI
intro f hf hfs
rw [le_principal_iff] at hfs
obtain ⟨_, ⟨x, hx, rfl⟩, hyf⟩ : ∃ y ∈ m '' s, map m f ≤ 𝓝 y
- exact hs (f.map m) (hf.map hm.uniformContinuous) (le_principal_iff.2 (image_mem_map hfs))
+ · exact hs (f.map m) (hf.map hm.uniformContinuous) (le_principal_iff.2 (image_mem_map hfs))
rw [map_le_iff_le_comap, ← nhds_induced, ← hm.inducing.induced] at hyf
exact ⟨x, hx, hyf⟩
#align is_complete_of_complete_image isComplete_of_complete_image
All these lemmas refer to the range of some function being open/range (i.e. isOpen
or isClosed
).
@@ -249,7 +249,7 @@ theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopolo
rcases @DiscreteTopology.eq_bot α _ _ with rfl; let _ : UniformSpace α := ⊥
exact
{ (uniformEmbedding_of_spaced_out hs hf).embedding with
- closed_range := isClosed_range_of_spaced_out hs hf }
+ isClosed_range := isClosed_range_of_spaced_out hs hf }
#align closed_embedding_of_spaced_out closedEmbedding_of_spaced_out
theorem closure_image_mem_nhds_of_uniformInducing {s : Set (α × α)} {e : α → β} (b : β)
separationRel
(#10644)
We had duplicated API between topological spaces and uniform spaces. In this PR I mostly deduplicate it with some exceptions:
SeparationQuotient.lift'
and SeparationQuotient.map
are leftovers from the old version
that are designed to work with uniform spaces;UniformSpace
when TopologicalSpace
would work.Outside of UniformSpace/Separation
, I mostly changed SeparatedSpace
to T0Space
and separationRel
to Inseparable
. I also rewrote a few proofs that were broken by the API change.
Fixes #2031
@@ -124,6 +124,9 @@ theorem UniformInducing.denseInducing {f : α → β} (h : UniformInducing f) (h
induced := h.inducing.induced }
#align uniform_inducing.dense_inducing UniformInducing.denseInducing
+theorem SeparationQuotient.uniformInducing_mk : UniformInducing (mk : α → SeparationQuotient α) :=
+ ⟨comap_mk_uniformity⟩
+
protected theorem UniformInducing.injective [T0Space α] {f : α → β} (h : UniformInducing f) :
Injective f :=
h.inducing.injective
@@ -241,7 +244,7 @@ theorem UniformEmbedding.denseEmbedding {f : α → β} (h : UniformEmbedding f)
#align uniform_embedding.dense_embedding UniformEmbedding.denseEmbedding
theorem closedEmbedding_of_spaced_out {α} [TopologicalSpace α] [DiscreteTopology α]
- [SeparatedSpace β] {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
+ [T0Space β] {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
(hf : Pairwise fun x y => (f x, f y) ∉ s) : ClosedEmbedding f := by
rcases @DiscreteTopology.eq_bot α _ _ with rfl; let _ : UniformSpace α := ⊥
exact
@@ -320,6 +323,16 @@ theorem UniformInducing.isComplete_range [CompleteSpace α] {f : α → β} (hf
(completeSpace_iff_isComplete_range hf).1 ‹_›
#align uniform_inducing.is_complete_range UniformInducing.isComplete_range
+theorem SeparationQuotient.completeSpace_iff :
+ CompleteSpace (SeparationQuotient α) ↔ CompleteSpace α := by
+ rw [completeSpace_iff_isComplete_univ, ← range_mk,
+ ← completeSpace_iff_isComplete_range uniformInducing_mk]
+
+instance SeparationQuotient.instCompleteSpace [CompleteSpace α] :
+ CompleteSpace (SeparationQuotient α) :=
+ completeSpace_iff.2 ‹_›
+#align uniform_space.complete_space_separation SeparationQuotient.instCompleteSpace
+
theorem completeSpace_congr {e : α ≃ β} (he : UniformEmbedding e) :
CompleteSpace α ↔ CompleteSpace β := by
rw [completeSpace_iff_isComplete_range he.toUniformInducing, e.range_eq_univ,
@@ -496,7 +509,7 @@ theorem uniformContinuous_uniformly_extend [CompleteSpace γ] : UniformContinuou
exact hs_comp ⟨f a, ha₂, ⟨f b, this, hb₂⟩⟩
#align uniform_continuous_uniformly_extend uniformContinuous_uniformly_extend
-variable [SeparatedSpace γ]
+variable [T0Space γ]
theorem uniformly_extend_of_ind (b : β) : ψ (e b) = f b :=
DenseInducing.extend_eq_at _ h_f.continuous.continuousAt
@@ -105,7 +105,7 @@ theorem UniformInducing.uniformContinuousOn_iff {f : α → β} {g : β → γ}
(hg : UniformInducing g) :
UniformContinuousOn f S ↔ UniformContinuousOn (g ∘ f) S := by
dsimp only [UniformContinuousOn, Tendsto]
- rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map]; rfl
+ rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map, comp_def, comp_def]
theorem UniformInducing.inducing {f : α → β} (h : UniformInducing f) : Inducing f := by
obtain rfl := h.comap_uniformSpace
@@ -38,9 +38,12 @@ structure UniformInducing (f : α → β) : Prop where
#align uniform_inducing UniformInducing
#align uniform_inducing_iff uniformInducing_iff
-protected lemma UniformInducing.comap_uniformSpace {f : α → β} (hf : UniformInducing f) :
- ‹UniformSpace β›.comap f = ‹UniformSpace α› :=
- UniformSpace.ext hf.1
+lemma uniformInducing_iff_uniformSpace {f : α → β} :
+ UniformInducing f ↔ ‹UniformSpace β›.comap f = ‹UniformSpace α› := by
+ rw [uniformInducing_iff, UniformSpace.ext_iff, Filter.ext_iff]
+ rfl
+
+protected alias ⟨UniformInducing.comap_uniformSpace, _⟩ := uniformInducing_iff_uniformSpace
#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
lemma uniformInducing_iff' {f : α → β} :
@@ -30,7 +30,7 @@ variable {α : Type u} {β : Type v} {γ : Type w} [UniformSpace α] [UniformSpa
/-- A map `f : α → β` between uniform spaces is called *uniform inducing* if the uniformity filter
on `α` is the pullback of the uniformity filter on `β` under `Prod.map f f`. If `α` is a separated
space, then this implies that `f` is injective, hence it is a `UniformEmbedding`. -/
-@[mk_iff uniformInducing_iff]
+@[mk_iff]
structure UniformInducing (f : α → β) : Prop where
/-- The uniformity filter on the domain is the pullback of the uniformity filter on the codomain
under `Prod.map f f`. -/
@@ -131,7 +131,7 @@ protected theorem UniformInducing.injective [T0Space α] {f : α → β} (h : Un
/-- A map `f : α → β` between uniform spaces is a *uniform embedding* if it is uniform inducing and
injective. If `α` is a separated space, then the latter assumption follows from the former. -/
-@[mk_iff uniformEmbedding_iff]
+@[mk_iff]
structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop where
/-- A uniform embedding is injective. -/
inj : Function.Injective f
@@ -98,6 +98,12 @@ theorem UniformInducing.uniformContinuous_iff {f : α → β} {g : β → γ} (h
rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map]; rfl
#align uniform_inducing.uniform_continuous_iff UniformInducing.uniformContinuous_iff
+theorem UniformInducing.uniformContinuousOn_iff {f : α → β} {g : β → γ} {S : Set α}
+ (hg : UniformInducing g) :
+ UniformContinuousOn f S ↔ UniformContinuousOn (g ∘ f) S := by
+ dsimp only [UniformContinuousOn, Tendsto]
+ rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map]; rfl
+
theorem UniformInducing.inducing {f : α → β} (h : UniformInducing f) : Inducing f := by
obtain rfl := h.comap_uniformSpace
exact inducing_induced f
And fix some names in comments where this revealed issues
@@ -201,7 +201,7 @@ theorem uniformEmbedding_iff_uniformInducing [T0Space α] {f : α → β} :
/-- If a map `f : α → β` sends any two distinct points to point that are **not** related by a fixed
`s ∈ 𝓤 β`, then `f` is uniform inducing with respect to the discrete uniformity on `α`:
-the preimage of `𝓤 β` under `prod.map f f` is the principal filter generated by the diagonal in
+the preimage of `𝓤 β` under `Prod.map f f` is the principal filter generated by the diagonal in
`α × α`. -/
theorem comap_uniformity_of_spaced_out {α} {f : α → β} {s : Set (β × β)} (hs : s ∈ 𝓤 β)
(hf : Pairwise fun x y => (f x, f y) ∉ s) : comap (Prod.map f f) (𝓤 β) = 𝓟 idRel := by
@@ -40,7 +40,7 @@ structure UniformInducing (f : α → β) : Prop where
protected lemma UniformInducing.comap_uniformSpace {f : α → β} (hf : UniformInducing f) :
‹UniformSpace β›.comap f = ‹UniformSpace α› :=
- uniformSpace_eq hf.1
+ UniformSpace.ext hf.1
#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
lemma uniformInducing_iff' {f : α → β} :
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -70,7 +70,7 @@ theorem UniformInducing.comp {g : β → γ} (hg : UniformInducing g) {f : α
⟨by rw [← hf.1, ← hg.1, comap_comap]; rfl⟩
#align uniform_inducing.comp UniformInducing.comp
-theorem UniformInducing.basis_uniformity {f : α → β} (hf : UniformInducing f) {ι : Sort _}
+theorem UniformInducing.basis_uniformity {f : α → β} (hf : UniformInducing f) {ι : Sort*}
{p : ι → Prop} {s : ι → Set (β × β)} (H : (𝓤 β).HasBasis p s) :
(𝓤 α).HasBasis p fun i => Prod.map f f ⁻¹' s i :=
hf.1 ▸ H.comap _
@@ -103,7 +103,7 @@ theorem UniformInducing.inducing {f : α → β} (h : UniformInducing f) : Induc
exact inducing_induced f
#align uniform_inducing.inducing UniformInducing.inducing
-theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
+theorem UniformInducing.prod {α' : Type*} {β' : Type*} [UniformSpace α'] [UniformSpace β']
{e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformInducing e₁) (h₂ : UniformInducing e₂) :
UniformInducing fun p : α × β => (e₁ p.1, e₂ p.2) :=
⟨by simp [(· ∘ ·), uniformity_prod, ← h₁.1, ← h₂.1, comap_inf, comap_comap]⟩
@@ -170,7 +170,7 @@ theorem UniformEmbedding.comp {g : β → γ} (hg : UniformEmbedding g) {f : α
{ hg.toUniformInducing.comp hf.toUniformInducing with inj := hg.inj.comp hf.inj }
#align uniform_embedding.comp UniformEmbedding.comp
-theorem Equiv.uniformEmbedding {α β : Type _} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
+theorem Equiv.uniformEmbedding {α β : Type*} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
(h₁ : UniformContinuous f) (h₂ : UniformContinuous f.symm) : UniformEmbedding f :=
uniformEmbedding_iff'.2 ⟨f.injective, h₁, by rwa [← Equiv.prodCongr_apply, ← map_equiv_symm]⟩
#align equiv.uniform_embedding Equiv.uniformEmbedding
@@ -263,7 +263,7 @@ theorem uniformEmbedding_subtypeEmb (p : α → Prop) {e : α → β} (ue : Unif
inj := (de.subtype p).inj }
#align uniform_embedding_subtype_emb uniformEmbedding_subtypeEmb
-theorem UniformEmbedding.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
+theorem UniformEmbedding.prod {α' : Type*} {β' : Type*} [UniformSpace α'] [UniformSpace β']
{e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformEmbedding e₁) (h₂ : UniformEmbedding e₂) :
UniformEmbedding fun p : α × β => (e₁ p.1, e₂ p.2) :=
{ h₁.toUniformInducing.prod h₂.toUniformInducing with inj := h₁.inj.Prod_map h₂.inj }
@@ -401,7 +401,7 @@ instance CompleteSpace.sum [CompleteSpace α] [CompleteSpace β] : CompleteSpace
end
-theorem uniformEmbedding_comap {α : Type _} {β : Type _} {f : α → β} [u : UniformSpace β]
+theorem uniformEmbedding_comap {α : Type*} {β : Type*} {f : α → β} [u : UniformSpace β]
(hf : Function.Injective f) : @UniformEmbedding α β (UniformSpace.comap f u) u f :=
@UniformEmbedding.mk _ _ (UniformSpace.comap f u) _ _
(@UniformInducing.mk _ _ (UniformSpace.comap f u) _ _ rfl) hf
@@ -423,7 +423,7 @@ theorem Embedding.to_uniformEmbedding {α β} [TopologicalSpace α] [u : Uniform
section UniformExtension
-variable {α : Type _} {β : Type _} {γ : Type _} [UniformSpace α] [UniformSpace β] [UniformSpace γ]
+variable {α : Type*} {β : Type*} {γ : Type*} [UniformSpace α] [UniformSpace β] [UniformSpace γ]
{e : β → α} (h_e : UniformInducing e) (h_dense : DenseRange e) {f : β → γ}
(h_f : UniformContinuous f)
@@ -2,16 +2,13 @@
Copyright (c) 2017 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Sébastien Gouëzel, Patrick Massot
-
-! This file was ported from Lean 3 source module topology.uniform_space.uniform_embedding
-! leanprover-community/mathlib commit 195fcd60ff2bfe392543bceb0ec2adcdb472db4c
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.UniformSpace.Cauchy
import Mathlib.Topology.UniformSpace.Separation
import Mathlib.Topology.DenseEmbedding
+#align_import topology.uniform_space.uniform_embedding from "leanprover-community/mathlib"@"195fcd60ff2bfe392543bceb0ec2adcdb472db4c"
+
/-!
# Uniform embeddings of uniform spaces.
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -390,7 +390,7 @@ theorem totallyBounded_preimage {f : α → β} {s : Set β} (hf : UniformEmbedd
rcases totallyBounded_iff_subset.1 (totallyBounded_subset (image_preimage_subset f s) hs) _ ht'
with ⟨c, cs, hfc, hct⟩
refine' ⟨f ⁻¹' c, hfc.preimage (hf.inj.injOn _), fun x h => _⟩
- have := hct (mem_image_of_mem f h); simp at this⊢
+ have := hct (mem_image_of_mem f h); simp at this ⊢
rcases this with ⟨z, zc, zt⟩
rcases cs zc with ⟨y, -, rfl⟩
exact ⟨y, zc, ts zt⟩
SProd
to implement overloaded notation · ×ˢ ·
(#4200)
Currently, the following notations are changed from · ×ˢ ·
because Lean 4 can't deal with ambiguous notations.
| Definition | Notation |
| :
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>
@@ -367,8 +367,8 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
have hg₁ : p (preimage Prod.swap s₁) t ∈ g :=
mem_lift (symm_le_uniformity hs₁) <| @mem_lift' α α f _ t ht
have hg₂ : p s₂ t ∈ g := mem_lift hs₂ <| @mem_lift' α α f _ t ht
- have hg : p (Prod.swap ⁻¹' s₁) t ×ˢ p s₂ t ∈ g ×ᶠ g := @prod_mem_prod α α _ _ g g hg₁ hg₂
- (g ×ᶠ g).sets_of_superset hg fun ⟨a, b⟩ ⟨⟨c₁, c₁t, hc₁⟩, ⟨c₂, c₂t, hc₂⟩⟩ =>
+ have hg : p (Prod.swap ⁻¹' s₁) t ×ˢ p s₂ t ∈ g ×ˢ g := @prod_mem_prod α α _ _ g g hg₁ hg₂
+ (g ×ˢ g).sets_of_superset hg fun ⟨a, b⟩ ⟨⟨c₁, c₁t, hc₁⟩, ⟨c₂, c₂t, hc₂⟩⟩ =>
have : (c₁, c₂) ∈ t ×ˢ t := ⟨c₁t, c₂t⟩
comp_s₁ <| prod_mk_mem_compRel hc₁ <| comp_s₂ <| prod_mk_mem_compRel (prod_t this) hc₂⟩
have : Cauchy (Filter.comap m g) := ‹Cauchy g›.comap' (le_of_eq hm.comap_uniformity) ‹_›
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -343,7 +343,7 @@ theorem completeSpace_extension {m : β → α} (hm : UniformInducing m) (dense
let g := (𝓤 α).lift fun s => f.lift' (p s)
have mp₀ : Monotone p := fun a b h t s ⟨x, xs, xa⟩ => ⟨x, xs, h xa⟩
have mp₁ : ∀ {s}, Monotone (p s) := fun h x ⟨y, ya, yxs⟩ => ⟨y, h ya, yxs⟩
- have : f ≤ g := le_infᵢ₂ fun s hs => le_infᵢ₂ fun t ht =>
+ have : f ≤ g := le_iInf₂ fun s hs => le_iInf₂ fun t ht =>
le_principal_iff.mpr <| mem_of_superset ht fun x hx => ⟨x, hx, refl_mem_uniformity hs⟩
have : NeBot g := hf.left.mono this
have : NeBot (comap m g) :=
UniformEmbedding
(#2584)
Forward-port leanprover-community/mathlib#18516
logic.equiv.basic
@d6aae1bcbd04b8de2022b9b83a5b5b10e10c777d
..195fcd60ff2bfe392543bceb0ec2adcdb472db4c
topology.separation
@92ca63f0fb391a9ca5f22d2409a6080e786d99f7
..195fcd60ff2bfe392543bceb0ec2adcdb472db4c
topology.uniform_space.basic
@e1a7bdeb4fd826b7e71d130d34988f0a2d26a177
..195fcd60ff2bfe392543bceb0ec2adcdb472db4c
topology.uniform_space.uniform_embedding
@2705404e701abc6b3127da906f40bae062a169c9
..195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Sébastien Gouëzel, Patrick Massot
! This file was ported from Lean 3 source module topology.uniform_space.uniform_embedding
-! leanprover-community/mathlib commit 2705404e701abc6b3127da906f40bae062a169c9
+! leanprover-community/mathlib commit 195fcd60ff2bfe392543bceb0ec2adcdb472db4c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -26,26 +26,44 @@ section
universe u v w
variable {α : Type u} {β : Type v} {γ : Type w} [UniformSpace α] [UniformSpace β] [UniformSpace γ]
+/-!
+### Uniform inducing maps
+-/
+
/-- A map `f : α → β` between uniform spaces is called *uniform inducing* if the uniformity filter
on `α` is the pullback of the uniformity filter on `β` under `Prod.map f f`. If `α` is a separated
space, then this implies that `f` is injective, hence it is a `UniformEmbedding`. -/
+@[mk_iff uniformInducing_iff]
structure UniformInducing (f : α → β) : Prop where
/-- The uniformity filter on the domain is the pullback of the uniformity filter on the codomain
under `Prod.map f f`. -/
comap_uniformity : comap (fun x : α × α => (f x.1, f x.2)) (𝓤 β) = 𝓤 α
#align uniform_inducing UniformInducing
+#align uniform_inducing_iff uniformInducing_iff
+
+protected lemma UniformInducing.comap_uniformSpace {f : α → β} (hf : UniformInducing f) :
+ ‹UniformSpace β›.comap f = ‹UniformSpace α› :=
+ uniformSpace_eq hf.1
+#align uniform_inducing.comap_uniform_space UniformInducing.comap_uniformSpace
+
+lemma uniformInducing_iff' {f : α → β} :
+ UniformInducing f ↔ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
+ rw [uniformInducing_iff, UniformContinuous, tendsto_iff_comap, le_antisymm_iff, and_comm]; rfl
+#align uniform_inducing_iff' uniformInducing_iff'
+
+protected lemma Filter.HasBasis.uniformInducing_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
+ UniformInducing f ↔
+ (∀ i, p' i → ∃ j, p j ∧ ∀ x y, (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
+ (∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j) := by
+ simp [uniformInducing_iff', h.uniformContinuous_iff h', (h'.comap _).le_basis_iff h, subset_def]
+#align filter.has_basis.uniform_inducing_iff Filter.HasBasis.uniformInducing_iff
theorem UniformInducing.mk' {f : α → β}
(h : ∀ s, s ∈ 𝓤 α ↔ ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s) : UniformInducing f :=
⟨by simp [eq_comm, Filter.ext_iff, subset_def, h]⟩
#align uniform_inducing.mk' UniformInducing.mk'
-theorem UniformInducing.inducing {f : α → β} (h : UniformInducing f) : Inducing f :=
- inducing_iff_nhds.2 fun a => by
- simp only [nhds_eq_comap_uniformity, ← h.comap_uniformity, comap_comap]
- rfl
-#align uniform_inducing.inducing UniformInducing.inducing
-
theorem uniformInducing_id : UniformInducing (@id α) :=
⟨by rw [← Prod.map_def, Prod.map_id, comap_id]⟩
#align uniform_inducing_id uniformInducing_id
@@ -73,12 +91,69 @@ theorem uniformInducing_of_compose {f : α → β} {g : β → γ} (hf : Uniform
exact comap_mono hg.le_comap
#align uniform_inducing_of_compose uniformInducing_of_compose
+theorem UniformInducing.uniformContinuous {f : α → β} (hf : UniformInducing f) :
+ UniformContinuous f := (uniformInducing_iff'.1 hf).1
+#align uniform_inducing.uniform_continuous UniformInducing.uniformContinuous
+
+theorem UniformInducing.uniformContinuous_iff {f : α → β} {g : β → γ} (hg : UniformInducing g) :
+ UniformContinuous f ↔ UniformContinuous (g ∘ f) := by
+ dsimp only [UniformContinuous, Tendsto]
+ rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map]; rfl
+#align uniform_inducing.uniform_continuous_iff UniformInducing.uniformContinuous_iff
+
+theorem UniformInducing.inducing {f : α → β} (h : UniformInducing f) : Inducing f := by
+ obtain rfl := h.comap_uniformSpace
+ exact inducing_induced f
+#align uniform_inducing.inducing UniformInducing.inducing
+
+theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
+ {e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformInducing e₁) (h₂ : UniformInducing e₂) :
+ UniformInducing fun p : α × β => (e₁ p.1, e₂ p.2) :=
+ ⟨by simp [(· ∘ ·), uniformity_prod, ← h₁.1, ← h₂.1, comap_inf, comap_comap]⟩
+#align uniform_inducing.prod UniformInducing.prod
+
+theorem UniformInducing.denseInducing {f : α → β} (h : UniformInducing f) (hd : DenseRange f) :
+ DenseInducing f :=
+ { dense := hd
+ induced := h.inducing.induced }
+#align uniform_inducing.dense_inducing UniformInducing.denseInducing
+
+protected theorem UniformInducing.injective [T0Space α] {f : α → β} (h : UniformInducing f) :
+ Injective f :=
+ h.inducing.injective
+
+/-!
+### Uniform embeddings
+-/
+
/-- A map `f : α → β` between uniform spaces is a *uniform embedding* if it is uniform inducing and
injective. If `α` is a separated space, then the latter assumption follows from the former. -/
+@[mk_iff uniformEmbedding_iff]
structure UniformEmbedding (f : α → β) extends UniformInducing f : Prop where
/-- A uniform embedding is injective. -/
inj : Function.Injective f
#align uniform_embedding UniformEmbedding
+#align uniform_embedding_iff uniformEmbedding_iff
+
+theorem uniformEmbedding_iff' {f : α → β} :
+ UniformEmbedding f ↔ Injective f ∧ UniformContinuous f ∧ comap (Prod.map f f) (𝓤 β) ≤ 𝓤 α := by
+ rw [uniformEmbedding_iff, and_comm, uniformInducing_iff']
+#align uniform_embedding_iff' uniformEmbedding_iff'
+
+theorem Filter.HasBasis.uniformEmbedding_iff' {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
+ UniformEmbedding f ↔ Injective f ∧
+ (∀ i, p' i → ∃ j, p j ∧ ∀ x y, (x, y) ∈ s j → (f x, f y) ∈ s' i) ∧
+ (∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j) := by
+ rw [uniformEmbedding_iff, and_comm, h.uniformInducing_iff h']
+#align filter.has_basis.uniform_embedding_iff' Filter.HasBasis.uniformEmbedding_iff'
+
+theorem Filter.HasBasis.uniformEmbedding_iff {ι ι'} {p : ι → Prop} {p' : ι' → Prop} {s s'}
+ (h : (𝓤 α).HasBasis p s) (h' : (𝓤 β).HasBasis p' s') {f : α → β} :
+ UniformEmbedding f ↔ Injective f ∧ UniformContinuous f ∧
+ (∀ j, p j → ∃ i, p' i ∧ ∀ x y, (f x, f y) ∈ s' i → (x, y) ∈ s j) := by
+ simp only [h.uniformEmbedding_iff' h', h.uniformContinuous_iff h']
+#align filter.has_basis.uniform_embedding_iff Filter.HasBasis.uniformEmbedding_iff
theorem uniformEmbedding_subtype_val {p : α → Prop} :
UniformEmbedding (Subtype.val : Subtype p → α) :=
@@ -98,46 +173,21 @@ theorem UniformEmbedding.comp {g : β → γ} (hg : UniformEmbedding g) {f : α
{ hg.toUniformInducing.comp hf.toUniformInducing with inj := hg.inj.comp hf.inj }
#align uniform_embedding.comp UniformEmbedding.comp
-theorem uniformEmbedding_def {f : α → β} :
- UniformEmbedding f ↔
- Function.Injective f ∧ ∀ s, s ∈ 𝓤 α ↔ ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s := by
- constructor
- · rintro ⟨⟨h⟩, h'⟩
- rw [eq_comm, Filter.ext_iff] at h
- simp [*, subset_def]
- · rintro ⟨h, h'⟩
- refine' UniformEmbedding.mk ⟨_⟩ h
- rw [eq_comm, Filter.ext_iff]
- simp [*, subset_def]
-#align uniform_embedding_def uniformEmbedding_def
-
-theorem uniformEmbedding_def' {f : α → β} :
- UniformEmbedding f ↔
- Function.Injective f ∧
- UniformContinuous f ∧ ∀ s, s ∈ 𝓤 α → ∃ t ∈ 𝓤 β, ∀ x y : α, (f x, f y) ∈ t → (x, y) ∈ s := by
- simp only [uniformEmbedding_def, uniformContinuous_def]
- exact ⟨fun ⟨I, H⟩ => ⟨I, fun s su => (H _).2 ⟨s, su, fun x y => id⟩, fun s => (H s).1⟩,
- fun ⟨I, H₁, H₂⟩ => ⟨I, fun s =>
- ⟨H₂ s, fun ⟨t, tu, h⟩ => mem_of_superset (H₁ t tu) fun ⟨a, b⟩ => h a b⟩⟩⟩
-#align uniform_embedding_def' uniformEmbedding_def'
-
theorem Equiv.uniformEmbedding {α β : Type _} [UniformSpace α] [UniformSpace β] (f : α ≃ β)
(h₁ : UniformContinuous f) (h₂ : UniformContinuous f.symm) : UniformEmbedding f :=
- { toUniformInducing := uniformInducing_of_compose h₁ h₂ <| by
- rw [f.symm_comp_self]; exact uniformInducing_id
- inj := f.injective }
+ uniformEmbedding_iff'.2 ⟨f.injective, h₁, by rwa [← Equiv.prodCongr_apply, ← map_equiv_symm]⟩
#align equiv.uniform_embedding Equiv.uniformEmbedding
theorem uniformEmbedding_inl : UniformEmbedding (Sum.inl : α → α ⊕ β) :=
- uniformEmbedding_def'.2 ⟨Sum.inl_injective, uniformContinuous_inl, fun s hs =>
+ uniformEmbedding_iff'.2 ⟨Sum.inl_injective, uniformContinuous_inl, fun s hs =>
⟨Prod.map Sum.inl Sum.inl '' s ∪ range (Prod.map Sum.inr Sum.inr),
- union_mem_sup (image_mem_map hs) range_mem_map, fun x y h => by simpa using h⟩⟩
+ union_mem_sup (image_mem_map hs) range_mem_map, fun x h => by simpa using h⟩⟩
#align uniform_embedding_inl uniformEmbedding_inl
theorem uniformEmbedding_inr : UniformEmbedding (Sum.inr : β → α ⊕ β) :=
- uniformEmbedding_def'.2 ⟨Sum.inr_injective, uniformContinuous_inr, fun s hs =>
+ uniformEmbedding_iff'.2 ⟨Sum.inr_injective, uniformContinuous_inr, fun s hs =>
⟨range (Prod.map Sum.inl Sum.inl) ∪ Prod.map Sum.inr Sum.inr '' s,
- union_mem_sup range_mem_map (image_mem_map hs), fun x y h => by simpa using h⟩⟩
+ union_mem_sup range_mem_map (image_mem_map hs), fun x h => by simpa using h⟩⟩
#align uniform_embedding_inr uniformEmbedding_inr
/-- If the domain of a `UniformInducing` map `f` is a T₀ space, then `f` is injective,
@@ -147,6 +197,11 @@ protected theorem UniformInducing.uniformEmbedding [T0Space α] {f : α → β}
⟨hf, hf.inducing.injective⟩
#align uniform_inducing.uniform_embedding UniformInducing.uniformEmbedding
+theorem uniformEmbedding_iff_uniformInducing [T0Space α] {f : α → β} :
+ UniformEmbedding f ↔ UniformInducing f :=
+ ⟨UniformEmbedding.toUniformInducing, UniformInducing.uniformEmbedding⟩
+#align uniform_embedding_iff_uniform_inducing uniformEmbedding_iff_uniformInducing
+
/-- If a map `f : α → β` sends any two distinct points to point that are **not** related by a fixed
`s ∈ 𝓤 β`, then `f` is uniform inducing with respect to the discrete uniformity on `α`:
the preimage of `𝓤 β` under `prod.map f f` is the principal filter generated by the diagonal in
@@ -169,29 +224,7 @@ theorem uniformEmbedding_of_spaced_out {α} {f : α → β} {s : Set (β × β)}
exact UniformInducing.uniformEmbedding ⟨comap_uniformity_of_spaced_out hs hf⟩
#align uniform_embedding_of_spaced_out uniformEmbedding_of_spaced_out
-theorem UniformInducing.uniformContinuous {f : α → β} (hf : UniformInducing f) :
- UniformContinuous f := by simp [UniformContinuous, hf.comap_uniformity.symm, tendsto_comap]
-#align uniform_inducing.uniform_continuous UniformInducing.uniformContinuous
-
-theorem UniformInducing.uniformContinuous_iff {f : α → β} {g : β → γ} (hg : UniformInducing g) :
- UniformContinuous f ↔ UniformContinuous (g ∘ f) := by
- dsimp only [UniformContinuous, Tendsto]
- rw [← hg.comap_uniformity, ← map_le_iff_le_comap, Filter.map_map]; rfl
-#align uniform_inducing.uniform_continuous_iff UniformInducing.uniformContinuous_iff
-
-theorem UniformInducing.prod {α' : Type _} {β' : Type _} [UniformSpace α'] [UniformSpace β']
- {e₁ : α → α'} {e₂ : β → β'} (h₁ : UniformInducing e₁) (h₂ : UniformInducing e₂) :
- UniformInducing fun p : α × β => (e₁ p.1, e₂ p.2) :=
- ⟨by simp [(· ∘ ·), uniformity_prod, ← h₁.1, ← h₂.1, comap_inf, comap_comap]⟩
-#align uniform_inducing.prod UniformInducing.prod
-
-theorem UniformInducing.denseInducing {f : α → β} (h : UniformInducing f) (hd : DenseRange f) :
- DenseInducing f :=
- { dense := hd
- induced := h.inducing.induced }
-#align uniform_inducing.dense_inducing UniformInducing.denseInducing
-
-theorem UniformEmbedding.embedding {f : α → β} (h : UniformEmbedding f) : Embedding f :=
+protected theorem UniformEmbedding.embedding {f : α → β} (h : UniformEmbedding f) : Embedding f :=
{ toInducing := h.toUniformInducing.inducing
inj := h.inj }
#align uniform_embedding.embedding UniformEmbedding.embedding
The unported dependencies are