topology.uniform_space.equicontinuity
⟷
Mathlib.Topology.UniformSpace.Equicontinuity
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)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -143,7 +143,7 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
#align set.uniform_equicontinuous Set.UniformEquicontinuous
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » V) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (x y «expr ∈ » V) -/
#print equicontinuousAt_iff_pair /-
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -173,7 +173,7 @@ theorem UniformEquicontinuous.equicontinuous {F : ι → β → α} (h : Uniform
theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (i : ι) :
ContinuousAt (F i) x₀ := by
intro U hU
- rw [UniformSpace.mem_nhds_iff] at hU
+ rw [UniformSpace.mem_nhds_iff] at hU
rcases hU with ⟨V, hV₁, hV₂⟩
exact mem_map.mpr (mem_of_superset (h V hV₁) fun x hx => hV₂ (hx i))
#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAt
@@ -450,7 +450,7 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
filter_upwards [hA V hV] with x hx
rw [SetCoe.forall] at *
- change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
+ change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
refine' (closure_minimal hx <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x₀).comp hu) ((continuous_apply x).comp hu)
#align equicontinuous_at.closure' EquicontinuousAt.closure'
@@ -518,7 +518,7 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
filter_upwards [hA V hV]
rintro ⟨x, y⟩ hxy
rw [SetCoe.forall] at *
- change A ⊆ (fun f => (u f x, u f y)) ⁻¹' V at hxy
+ change A ⊆ (fun f => (u f x, u f y)) ⁻¹' V at hxy
refine' (closure_minimal hxy <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x).comp hu) ((continuous_apply y).comp hu)
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -277,14 +277,14 @@ theorem equicontinuous_iff_range {F : ι → X → α} :
#align equicontinuous_iff_range equicontinuous_iff_range
-/
-#print uniformEquicontinuous_at_iff_range /-
+#print uniformEquicontinuous_iff_range /-
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff `range 𝓕` is uniformly equicontinuous,
i.e the family `coe : range F → β → α` is uniformly equicontinuous. -/
-theorem uniformEquicontinuous_at_iff_range {F : ι → β → α} :
+theorem uniformEquicontinuous_iff_range {F : ι → β → α} :
UniformEquicontinuous F ↔ UniformEquicontinuous (coe : range F → β → α) :=
⟨fun h => by rw [← comp_range_splitting F] <;> exact h.comp _, fun h =>
h.comp (rangeFactorization F)⟩
-#align uniform_equicontinuous_at_iff_range uniformEquicontinuous_at_iff_range
+#align uniform_equicontinuous_at_iff_range uniformEquicontinuous_iff_range
-/
section
@@ -456,13 +456,13 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
#align equicontinuous_at.closure' EquicontinuousAt.closure'
-/
-#print EquicontinuousAt.closure /-
+#print Set.EquicontinuousAt.closure /-
/-- If a set of functions is equicontinuous at some `x₀`, its closure for the product topology is
also equicontinuous at `x₀`. -/
-theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
+theorem Set.EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
(closure A).EquicontinuousAt x₀ :=
@EquicontinuousAt.closure' _ _ _ _ _ _ _ id _ hA continuous_id
-#align equicontinuous_at.closure EquicontinuousAt.closure
+#align equicontinuous_at.closure Set.EquicontinuousAt.closure
-/
#print Filter.Tendsto.continuousAt_of_equicontinuousAt /-
@@ -487,21 +487,21 @@ theorem Equicontinuous.closure' {A : Set Y} {u : Y → X → α}
#align equicontinuous.closure' Equicontinuous.closure'
-/
-#print Equicontinuous.closure /-
+#print Set.Equicontinuous.closure /-
/-- If a set of functions is equicontinuous, its closure for the product topology is also
equicontinuous. -/
-theorem Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
+theorem Set.Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
(closure A).Equicontinuous := fun x => (hA x).closure
-#align equicontinuous.closure Equicontinuous.closure
+#align equicontinuous.closure Set.Equicontinuous.closure
-/
-#print Filter.Tendsto.continuous_of_equicontinuousAt /-
+#print Filter.Tendsto.continuous_of_equicontinuous /-
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous, then the limit is continuous. -/
-theorem Filter.Tendsto.continuous_of_equicontinuousAt {l : Filter ι} [l.ne_bot] {F : ι → X → α}
+theorem Filter.Tendsto.continuous_of_equicontinuous {l : Filter ι} [l.ne_bot] {F : ι → X → α}
{f : X → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : Equicontinuous F) : Continuous f :=
continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
-#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuousAt
+#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous
-/
#print UniformEquicontinuous.closure' /-
@@ -524,13 +524,13 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
-/
-#print UniformEquicontinuous.closure /-
+#print Set.UniformEquicontinuous.closure /-
/-- If a set of functions is uniformly equicontinuous, its closure for the product topology is also
uniformly equicontinuous. -/
-theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEquicontinuous) :
+theorem Set.UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEquicontinuous) :
(closure A).UniformEquicontinuous :=
@UniformEquicontinuous.closure' _ _ _ _ _ _ _ id hA continuous_id
-#align uniform_equicontinuous.closure UniformEquicontinuous.closure
+#align uniform_equicontinuous.closure Set.UniformEquicontinuous.closure
-/
#print Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous /-
@@ -539,7 +539,7 @@ family `𝓕` is uniformly equicontinuous, then the limit is uniformly continuou
theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι} [l.ne_bot]
{F : ι → β → α} {f : β → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : UniformEquicontinuous F) :
UniformContinuous f :=
- (uniformEquicontinuous_at_iff_range.mp h₂).closure.UniformContinuous
+ (uniformEquicontinuous_iff_range.mp h₂).closure.UniformContinuous
⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
#align filter.tendsto.uniform_continuous_of_uniform_equicontinuous Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2022 Anatole Dedecker. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker
-/
-import Mathbin.Topology.UniformSpace.UniformConvergenceTopology
+import Topology.UniformSpace.UniformConvergenceTopology
#align_import topology.uniform_space.equicontinuity from "leanprover-community/mathlib"@"ee05e9ce1322178f0c12004eb93c00d2c8c00ed2"
@@ -143,7 +143,7 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
#align set.uniform_equicontinuous Set.UniformEquicontinuous
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » V) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (x y «expr ∈ » V) -/
#print equicontinuousAt_iff_pair /-
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -495,13 +495,13 @@ theorem Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
#align equicontinuous.closure Equicontinuous.closure
-/
-#print Filter.Tendsto.continuous_of_equicontinuous_at /-
+#print Filter.Tendsto.continuous_of_equicontinuousAt /-
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous, then the limit is continuous. -/
-theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.ne_bot] {F : ι → X → α}
+theorem Filter.Tendsto.continuous_of_equicontinuousAt {l : Filter ι} [l.ne_bot] {F : ι → X → α}
{f : X → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : Equicontinuous F) : Continuous f :=
continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
-#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous_at
+#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuousAt
-/
#print UniformEquicontinuous.closure' /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2022 Anatole Dedecker. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker
-
-! This file was ported from Lean 3 source module topology.uniform_space.equicontinuity
-! leanprover-community/mathlib commit ee05e9ce1322178f0c12004eb93c00d2c8c00ed2
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.UniformSpace.UniformConvergenceTopology
+#align_import topology.uniform_space.equicontinuity from "leanprover-community/mathlib"@"ee05e9ce1322178f0c12004eb93c00d2c8c00ed2"
+
/-!
# Equicontinuity of a family of functions
@@ -146,7 +143,7 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
#align set.uniform_equicontinuous Set.UniformEquicontinuous
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » V) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » V) -/
#print equicontinuousAt_iff_pair /-
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -147,6 +147,7 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » V) -/
+#print equicontinuousAt_iff_pair /-
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
@@ -160,13 +161,17 @@ theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
· rcases H U hU with ⟨V, hV, hVU⟩
filter_upwards [hV] using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
#align equicontinuous_at_iff_pair equicontinuousAt_iff_pair
+-/
+#print UniformEquicontinuous.equicontinuous /-
/-- Uniform equicontinuity implies equicontinuity. -/
theorem UniformEquicontinuous.equicontinuous {F : ι → β → α} (h : UniformEquicontinuous F) :
Equicontinuous F := fun x₀ U hU =>
mem_of_superset (ball_mem_nhds x₀ (h U hU)) fun x hx i => hx i
#align uniform_equicontinuous.equicontinuous UniformEquicontinuous.equicontinuous
+-/
+#print EquicontinuousAt.continuousAt /-
/-- Each function of a family equicontinuous at `x₀` is continuous at `x₀`. -/
theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (i : ι) :
ContinuousAt (F i) x₀ := by
@@ -175,64 +180,88 @@ theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : Equi
rcases hU with ⟨V, hV₁, hV₂⟩
exact mem_map.mpr (mem_of_superset (h V hV₁) fun x hx => hV₂ (hx i))
#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAt
+-/
+#print Set.EquicontinuousAt.continuousAt_of_mem /-
protected theorem Set.EquicontinuousAt.continuousAt_of_mem {H : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) {f : X → α} (hf : f ∈ H) : ContinuousAt f x₀ :=
h.ContinuousAt ⟨f, hf⟩
#align set.equicontinuous_at.continuous_at_of_mem Set.EquicontinuousAt.continuousAt_of_mem
+-/
+#print Equicontinuous.continuous /-
/-- Each function of an equicontinuous family is continuous. -/
theorem Equicontinuous.continuous {F : ι → X → α} (h : Equicontinuous F) (i : ι) :
Continuous (F i) :=
continuous_iff_continuousAt.mpr fun x => (h x).ContinuousAt i
#align equicontinuous.continuous Equicontinuous.continuous
+-/
+#print Set.Equicontinuous.continuous_of_mem /-
protected theorem Set.Equicontinuous.continuous_of_mem {H : Set <| X → α} (h : H.Equicontinuous)
{f : X → α} (hf : f ∈ H) : Continuous f :=
h.Continuous ⟨f, hf⟩
#align set.equicontinuous.continuous_of_mem Set.Equicontinuous.continuous_of_mem
+-/
+#print UniformEquicontinuous.uniformContinuous /-
/-- Each function of a uniformly equicontinuous family is uniformly continuous. -/
theorem UniformEquicontinuous.uniformContinuous {F : ι → β → α} (h : UniformEquicontinuous F)
(i : ι) : UniformContinuous (F i) := fun U hU =>
mem_map.mpr (mem_of_superset (h U hU) fun xy hxy => hxy i)
#align uniform_equicontinuous.uniform_continuous UniformEquicontinuous.uniformContinuous
+-/
+#print Set.UniformEquicontinuous.uniformContinuous_of_mem /-
protected theorem Set.UniformEquicontinuous.uniformContinuous_of_mem {H : Set <| β → α}
(h : H.UniformEquicontinuous) {f : β → α} (hf : f ∈ H) : UniformContinuous f :=
h.UniformContinuous ⟨f, hf⟩
#align set.uniform_equicontinuous.uniform_continuous_of_mem Set.UniformEquicontinuous.uniformContinuous_of_mem
+-/
+#print EquicontinuousAt.comp /-
/-- Taking sub-families preserves equicontinuity at a point. -/
theorem EquicontinuousAt.comp {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (u : κ → ι) :
EquicontinuousAt (F ∘ u) x₀ := fun U hU => (h U hU).mono fun x H k => H (u k)
#align equicontinuous_at.comp EquicontinuousAt.comp
+-/
+#print Set.EquicontinuousAt.mono /-
protected theorem Set.EquicontinuousAt.mono {H H' : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) (hH : H' ⊆ H) : H'.EquicontinuousAt x₀ :=
h.comp (inclusion hH)
#align set.equicontinuous_at.mono Set.EquicontinuousAt.mono
+-/
+#print Equicontinuous.comp /-
/-- Taking sub-families preserves equicontinuity. -/
theorem Equicontinuous.comp {F : ι → X → α} (h : Equicontinuous F) (u : κ → ι) :
Equicontinuous (F ∘ u) := fun x => (h x).comp u
#align equicontinuous.comp Equicontinuous.comp
+-/
+#print Set.Equicontinuous.mono /-
protected theorem Set.Equicontinuous.mono {H H' : Set <| X → α} (h : H.Equicontinuous)
(hH : H' ⊆ H) : H'.Equicontinuous :=
h.comp (inclusion hH)
#align set.equicontinuous.mono Set.Equicontinuous.mono
+-/
+#print UniformEquicontinuous.comp /-
/-- Taking sub-families preserves uniform equicontinuity. -/
theorem UniformEquicontinuous.comp {F : ι → β → α} (h : UniformEquicontinuous F) (u : κ → ι) :
UniformEquicontinuous (F ∘ u) := fun U hU => (h U hU).mono fun x H k => H (u k)
#align uniform_equicontinuous.comp UniformEquicontinuous.comp
+-/
+#print Set.UniformEquicontinuous.mono /-
protected theorem Set.UniformEquicontinuous.mono {H H' : Set <| β → α} (h : H.UniformEquicontinuous)
(hH : H' ⊆ H) : H'.UniformEquicontinuous :=
h.comp (inclusion hH)
#align set.uniform_equicontinuous.mono Set.UniformEquicontinuous.mono
+-/
+#print equicontinuousAt_iff_range /-
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff `range 𝓕` is equicontinuous at `x₀`,
i.e the family `coe : range F → X → α` is equicontinuous at `x₀`. -/
theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
@@ -240,14 +269,18 @@ theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
⟨fun h => by rw [← comp_range_splitting F] <;> exact h.comp _, fun h =>
h.comp (rangeFactorization F)⟩
#align equicontinuous_at_iff_range equicontinuousAt_iff_range
+-/
+#print equicontinuous_iff_range /-
/-- A family `𝓕 : ι → X → α` is equicontinuous iff `range 𝓕` is equicontinuous,
i.e the family `coe : range F → X → α` is equicontinuous. -/
theorem equicontinuous_iff_range {F : ι → X → α} :
Equicontinuous F ↔ Equicontinuous (coe : range F → X → α) :=
forall_congr' fun x₀ => equicontinuousAt_iff_range
#align equicontinuous_iff_range equicontinuous_iff_range
+-/
+#print uniformEquicontinuous_at_iff_range /-
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff `range 𝓕` is uniformly equicontinuous,
i.e the family `coe : range F → β → α` is uniformly equicontinuous. -/
theorem uniformEquicontinuous_at_iff_range {F : ι → β → α} :
@@ -255,11 +288,13 @@ theorem uniformEquicontinuous_at_iff_range {F : ι → β → α} :
⟨fun h => by rw [← comp_range_splitting F] <;> exact h.comp _, fun h =>
h.comp (rangeFactorization F)⟩
#align uniform_equicontinuous_at_iff_range uniformEquicontinuous_at_iff_range
+-/
section
open UniformFun
+#print equicontinuousAt_iff_continuousAt /-
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff the function `swap 𝓕 : X → ι → α` is
continuous at `x₀` *when `ι → α` is equipped with the topology of uniform convergence*. This is
very useful for developping the equicontinuity API, but it should not be used directly for other
@@ -268,7 +303,9 @@ theorem equicontinuousAt_iff_continuousAt {F : ι → X → α} {x₀ : X} :
EquicontinuousAt F x₀ ↔ ContinuousAt (ofFun ∘ Function.swap F : X → ι →ᵤ α) x₀ := by
rw [ContinuousAt, (UniformFun.hasBasis_nhds ι α _).tendsto_right_iff] <;> rfl
#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAt
+-/
+#print equicontinuous_iff_continuous /-
/-- A family `𝓕 : ι → X → α` is equicontinuous iff the function `swap 𝓕 : X → ι → α` is
continuous *when `ι → α` is equipped with the topology of uniform convergence*. This is
very useful for developping the equicontinuity API, but it should not be used directly for other
@@ -277,7 +314,9 @@ theorem equicontinuous_iff_continuous {F : ι → X → α} :
Equicontinuous F ↔ Continuous (ofFun ∘ Function.swap F : X → ι →ᵤ α) := by
simp_rw [Equicontinuous, continuous_iff_continuousAt, equicontinuousAt_iff_continuousAt]
#align equicontinuous_iff_continuous equicontinuous_iff_continuous
+-/
+#print uniformEquicontinuous_iff_uniformContinuous /-
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff the function `swap 𝓕 : β → ι → α` is
uniformly continuous *when `ι → α` is equipped with the uniform structure of uniform convergence*.
This is very useful for developping the equicontinuity API, but it should not be used directly
@@ -286,7 +325,9 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
UniformEquicontinuous F ↔ UniformContinuous (ofFun ∘ Function.swap F : β → ι →ᵤ α) := by
rw [UniformContinuous, (UniformFun.hasBasis_uniformity ι α).tendsto_right_iff] <;> rfl
#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuous
+-/
+#print Filter.HasBasis.equicontinuousAt_iff_left /-
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ (k : _) (_ : p k), ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U :=
@@ -295,7 +336,9 @@ theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop
hX.tendsto_iff (UniformFun.hasBasis_nhds ι α _)]
rfl
#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_left
+-/
+#print Filter.HasBasis.equicontinuousAt_iff_right /-
theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Prop} {s : κ → Set (α × α)}
{F : ι → X → α} {x₀ : X} (hα : (𝓤 α).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ k, p k → ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ s k :=
@@ -304,7 +347,9 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Pro
(UniformFun.hasBasis_nhds_of_basis ι α _ hα).tendsto_right_iff]
rfl
#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_right
+-/
+#print Filter.HasBasis.equicontinuousAt_iff /-
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -315,7 +360,9 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ
hX.tendsto_iff (UniformFun.hasBasis_nhds_of_basis ι α _ hα)]
rfl
#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iff
+-/
+#print Filter.HasBasis.uniformEquicontinuous_iff_left /-
theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
@@ -326,7 +373,9 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ →
simp_rw [Prod.forall]
rfl
#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_left
+-/
+#print Filter.HasBasis.uniformEquicontinuous_iff_right /-
theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ → Prop}
{s : κ → Set (α × α)} {F : ι → β → α} (hα : (𝓤 α).HasBasis p s) :
UniformEquicontinuous F ↔ ∀ k, p k → ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ s k :=
@@ -335,7 +384,9 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ
(UniformFun.hasBasis_uniformity_of_basis ι α hα).tendsto_right_iff]
rfl
#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_right
+-/
+#print Filter.HasBasis.uniformEquicontinuous_iff /-
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -347,7 +398,9 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
simp_rw [Prod.forall]
rfl
#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iff
+-/
+#print UniformInducing.equicontinuousAt_iff /-
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
equicontinuous at `x₀`. -/
@@ -358,8 +411,10 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
rw [equicontinuousAt_iff_continuousAt, equicontinuousAt_iff_continuousAt, this.continuous_at_iff]
rfl
#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iff
+-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
+#print UniformInducing.equicontinuous_iff /-
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is equicontinuous. -/
theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β} (hu : UniformInducing u) :
@@ -369,7 +424,9 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
"./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]]"
rw [hu.equicontinuous_at_iff]
#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iff
+-/
+#print UniformInducing.uniformEquicontinuous_iff /-
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
equicontinuous. -/
@@ -381,7 +438,9 @@ theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α
this.uniform_continuous_iff]
rfl
#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iff
+-/
+#print EquicontinuousAt.closure' /-
/-- A version of `equicontinuous_at.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
@@ -398,14 +457,18 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
refine' (closure_minimal hx <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x₀).comp hu) ((continuous_apply x).comp hu)
#align equicontinuous_at.closure' EquicontinuousAt.closure'
+-/
+#print EquicontinuousAt.closure /-
/-- If a set of functions is equicontinuous at some `x₀`, its closure for the product topology is
also equicontinuous at `x₀`. -/
theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
(closure A).EquicontinuousAt x₀ :=
@EquicontinuousAt.closure' _ _ _ _ _ _ _ id _ hA continuous_id
#align equicontinuous_at.closure EquicontinuousAt.closure
+-/
+#print Filter.Tendsto.continuousAt_of_equicontinuousAt /-
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous at some `x₀ : X`, then the limit is continuous at `x₀`. -/
theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.ne_bot] {F : ι → X → α}
@@ -414,7 +477,9 @@ theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.ne_bo
(equicontinuousAt_iff_range.mp h₂).closure.ContinuousAt
⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
#align filter.tendsto.continuous_at_of_equicontinuous_at Filter.Tendsto.continuousAt_of_equicontinuousAt
+-/
+#print Equicontinuous.closure' /-
/-- A version of `equicontinuous.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
@@ -423,20 +488,26 @@ theorem Equicontinuous.closure' {A : Set Y} {u : Y → X → α}
(hA : Equicontinuous (u ∘ coe : A → X → α)) (hu : Continuous u) :
Equicontinuous (u ∘ coe : closure A → X → α) := fun x => (hA x).closure' hu
#align equicontinuous.closure' Equicontinuous.closure'
+-/
+#print Equicontinuous.closure /-
/-- If a set of functions is equicontinuous, its closure for the product topology is also
equicontinuous. -/
theorem Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
(closure A).Equicontinuous := fun x => (hA x).closure
#align equicontinuous.closure Equicontinuous.closure
+-/
+#print Filter.Tendsto.continuous_of_equicontinuous_at /-
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous, then the limit is continuous. -/
theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.ne_bot] {F : ι → X → α}
{f : X → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : Equicontinuous F) : Continuous f :=
continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous_at
+-/
+#print UniformEquicontinuous.closure' /-
/-- A version of `uniform_equicontinuous.closure` applicable to subsets of types which embed
continuously into `β → α` with the product topology. It turns out we don't need any other condition
on the embedding than continuity, but in practice this will mostly be applied to `fun_like` types
@@ -454,14 +525,18 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
refine' (closure_minimal hxy <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x).comp hu) ((continuous_apply y).comp hu)
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
+-/
+#print UniformEquicontinuous.closure /-
/-- If a set of functions is uniformly equicontinuous, its closure for the product topology is also
uniformly equicontinuous. -/
theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEquicontinuous) :
(closure A).UniformEquicontinuous :=
@UniformEquicontinuous.closure' _ _ _ _ _ _ _ id hA continuous_id
#align uniform_equicontinuous.closure UniformEquicontinuous.closure
+-/
+#print Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous /-
/-- If `𝓕 : ι → β → α` tends to `f : β → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is uniformly equicontinuous, then the limit is uniformly continuous. -/
theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι} [l.ne_bot]
@@ -470,6 +545,7 @@ theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι
(uniformEquicontinuous_at_iff_range.mp h₂).closure.UniformContinuous
⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
#align filter.tendsto.uniform_continuous_of_uniform_equicontinuous Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -146,7 +146,7 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
#align set.uniform_equicontinuous Set.UniformEquicontinuous
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » V) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (x y «expr ∈ » V) -/
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -158,7 +158,7 @@ theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
refine' ⟨_, H V hV, fun x hx y hy i => hVU (prod_mk_mem_compRel _ (hy i))⟩
exact hVsymm.mk_mem_comm.mp (hx i)
· rcases H U hU with ⟨V, hV, hVU⟩
- filter_upwards [hV]using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
+ filter_upwards [hV] using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
#align equicontinuous_at_iff_pair equicontinuousAt_iff_pair
/-- Uniform equicontinuity implies equicontinuity. -/
@@ -392,7 +392,7 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
by
intro U hU
rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
- filter_upwards [hA V hV]with x hx
+ filter_upwards [hA V hV] with x hx
rw [SetCoe.forall] at *
change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
refine' (closure_minimal hx <| hVclosed.preimage <| _).trans (preimage_mono hVU)
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -171,7 +171,7 @@ theorem UniformEquicontinuous.equicontinuous {F : ι → β → α} (h : Uniform
theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (i : ι) :
ContinuousAt (F i) x₀ := by
intro U hU
- rw [UniformSpace.mem_nhds_iff] at hU
+ rw [UniformSpace.mem_nhds_iff] at hU
rcases hU with ⟨V, hV₁, hV₂⟩
exact mem_map.mpr (mem_of_superset (h V hV₁) fun x hx => hV₂ (hx i))
#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAt
@@ -289,7 +289,7 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
- EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ (k : _)(_ : p k), ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U :=
+ EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ (k : _) (_ : p k), ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U :=
by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
hX.tendsto_iff (UniformFun.hasBasis_nhds ι α _)]
@@ -309,7 +309,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
EquicontinuousAt F x₀ ↔
- ∀ k₂, p₂ k₂ → ∃ (k₁ : _)(_ : p₁ k₁), ∀ x ∈ s₁ k₁, ∀ i, (F i x₀, F i x) ∈ s₂ k₂ :=
+ ∀ k₂, p₂ k₂ → ∃ (k₁ : _) (_ : p₁ k₁), ∀ x ∈ s₁ k₁, ∀ i, (F i x₀, F i x) ∈ s₂ k₂ :=
by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
hX.tendsto_iff (UniformFun.hasBasis_nhds_of_basis ι α _ hα)]
@@ -319,7 +319,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ
theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
- ∀ U ∈ 𝓤 α, ∃ (k : _)(_ : p k), ∀ x y, (x, y) ∈ s k → ∀ i, (F i x, F i y) ∈ U :=
+ ∀ U ∈ 𝓤 α, ∃ (k : _) (_ : p k), ∀ x y, (x, y) ∈ s k → ∀ i, (F i x, F i y) ∈ U :=
by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
hβ.tendsto_iff (UniformFun.hasBasis_uniformity ι α)]
@@ -340,7 +340,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
UniformEquicontinuous F ↔
- ∀ k₂, p₂ k₂ → ∃ (k₁ : _)(_ : p₁ k₁), ∀ x y, (x, y) ∈ s₁ k₁ → ∀ i, (F i x, F i y) ∈ s₂ k₂ :=
+ ∀ k₂, p₂ k₂ → ∃ (k₁ : _) (_ : p₁ k₁), ∀ x y, (x, y) ∈ s₁ k₁ → ∀ i, (F i x, F i y) ∈ s₂ k₂ :=
by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
hβ.tendsto_iff (UniformFun.hasBasis_uniformity_of_basis ι α hα)]
@@ -394,7 +394,7 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
filter_upwards [hA V hV]with x hx
rw [SetCoe.forall] at *
- change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
+ change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
refine' (closure_minimal hx <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x₀).comp hu) ((continuous_apply x).comp hu)
#align equicontinuous_at.closure' EquicontinuousAt.closure'
@@ -450,7 +450,7 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
filter_upwards [hA V hV]
rintro ⟨x, y⟩ hxy
rw [SetCoe.forall] at *
- change A ⊆ (fun f => (u f x, u f y)) ⁻¹' V at hxy
+ change A ⊆ (fun f => (u f x, u f y)) ⁻¹' V at hxy
refine' (closure_minimal hxy <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x).comp hu) ((continuous_apply y).comp hu)
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -91,7 +91,7 @@ section
open UniformSpace Filter Set
-open uniformity Topology UniformConvergence
+open scoped uniformity Topology UniformConvergence
variable {ι κ X Y Z α β γ 𝓕 : Type _} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
[UniformSpace α] [UniformSpace β] [UniformSpace γ]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -146,12 +146,6 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
#align set.uniform_equicontinuous Set.UniformEquicontinuous
-/
-/- warning: equicontinuous_at_iff_pair -> equicontinuousAt_iff_pair is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u3} (Prod.{u3, u3} α α)), (Membership.Mem.{u3, u3} (Set.{u3} (Prod.{u3, u3} α α)) (Filter.{u3} (Prod.{u3, u3} α α)) (Filter.hasMem.{u3} (Prod.{u3, u3} α α)) U (uniformity.{u3} α _inst_4)) -> (Exists.{succ u2} (Set.{u2} X) (fun (V : Set.{u2} X) => Exists.{0} (Membership.Mem.{u2, u2} (Set.{u2} X) (Filter.{u2} X) (Filter.hasMem.{u2} X) V (nhds.{u2} X _inst_1 x₀)) (fun (H : Membership.Mem.{u2, u2} (Set.{u2} X) (Filter.{u2} X) (Filter.hasMem.{u2} X) V (nhds.{u2} X _inst_1 x₀)) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x V) -> (forall (y : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) y V) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x) (F i y)) U))))))
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u2} (Set.{u2} X) (fun (V : Set.{u2} X) => And (Membership.mem.{u2, u2} (Set.{u2} X) (Filter.{u2} X) (instMembershipSetFilter.{u2} X) V (nhds.{u2} X _inst_1 x₀)) (forall (x : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) x V) -> (forall (y : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) y V) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x) (F i y)) U))))))
-Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_pair equicontinuousAt_iff_pairₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » V) -/
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
@@ -167,24 +161,12 @@ theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
filter_upwards [hV]using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
#align equicontinuous_at_iff_pair equicontinuousAt_iff_pair
-/- warning: uniform_equicontinuous.equicontinuous -> UniformEquicontinuous.equicontinuous is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) -> (Equicontinuous.{u1, u3, u2} ι β α (UniformSpace.toTopologicalSpace.{u3} β _inst_5) _inst_4 F)
-but is expected to have type
- forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) -> (Equicontinuous.{u3, u1, u2} ι β α (UniformSpace.toTopologicalSpace.{u1} β _inst_5) _inst_4 F)
-Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.equicontinuous UniformEquicontinuous.equicontinuousₓ'. -/
/-- Uniform equicontinuity implies equicontinuity. -/
theorem UniformEquicontinuous.equicontinuous {F : ι → β → α} (h : UniformEquicontinuous F) :
Equicontinuous F := fun x₀ U hU =>
mem_of_superset (ball_mem_nhds x₀ (h U hU)) fun x hx i => hx i
#align uniform_equicontinuous.equicontinuous UniformEquicontinuous.equicontinuous
-/- warning: equicontinuous_at.continuous_at -> EquicontinuousAt.continuousAt is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) -> (forall (i : ι), ContinuousAt.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) (F i) x₀)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) -> (forall (i : ι), ContinuousAt.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) (F i) x₀)
-Case conversion may be inaccurate. Consider using '#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAtₓ'. -/
/-- Each function of a family equicontinuous at `x₀` is continuous at `x₀`. -/
theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (i : ι) :
ContinuousAt (F i) x₀ := by
@@ -194,135 +176,63 @@ theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : Equi
exact mem_map.mpr (mem_of_superset (h V hV₁) fun x hx => hV₂ (hx i))
#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAt
-/- warning: set.equicontinuous_at.continuous_at_of_mem -> Set.EquicontinuousAt.continuousAt_of_mem is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 H x₀) -> (forall {f : X -> α}, (Membership.Mem.{max u1 u2, max u1 u2} (X -> α) (Set.{max u1 u2} (X -> α)) (Set.hasMem.{max u1 u2} (X -> α)) f H) -> (ContinuousAt.{u1, u2} X α _inst_1 (UniformSpace.toTopologicalSpace.{u2} α _inst_4) f x₀))
-but is expected to have type
- forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 H x₀) -> (forall {f : X -> α}, (Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) f H) -> (ContinuousAt.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f x₀))
-Case conversion may be inaccurate. Consider using '#align set.equicontinuous_at.continuous_at_of_mem Set.EquicontinuousAt.continuousAt_of_memₓ'. -/
protected theorem Set.EquicontinuousAt.continuousAt_of_mem {H : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) {f : X → α} (hf : f ∈ H) : ContinuousAt f x₀ :=
h.ContinuousAt ⟨f, hf⟩
#align set.equicontinuous_at.continuous_at_of_mem Set.EquicontinuousAt.continuousAt_of_mem
-/- warning: equicontinuous.continuous -> Equicontinuous.continuous is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) -> (forall (i : ι), Continuous.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) (F i))
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) -> (forall (i : ι), Continuous.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) (F i))
-Case conversion may be inaccurate. Consider using '#align equicontinuous.continuous Equicontinuous.continuousₓ'. -/
/-- Each function of an equicontinuous family is continuous. -/
theorem Equicontinuous.continuous {F : ι → X → α} (h : Equicontinuous F) (i : ι) :
Continuous (F i) :=
continuous_iff_continuousAt.mpr fun x => (h x).ContinuousAt i
#align equicontinuous.continuous Equicontinuous.continuous
-/- warning: set.equicontinuous.continuous_of_mem -> Set.Equicontinuous.continuous_of_mem is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)}, (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 H) -> (forall {f : X -> α}, (Membership.Mem.{max u1 u2, max u1 u2} (X -> α) (Set.{max u1 u2} (X -> α)) (Set.hasMem.{max u1 u2} (X -> α)) f H) -> (Continuous.{u1, u2} X α _inst_1 (UniformSpace.toTopologicalSpace.{u2} α _inst_4) f))
-but is expected to have type
- forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)}, (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 H) -> (forall {f : X -> α}, (Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) f H) -> (Continuous.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f))
-Case conversion may be inaccurate. Consider using '#align set.equicontinuous.continuous_of_mem Set.Equicontinuous.continuous_of_memₓ'. -/
protected theorem Set.Equicontinuous.continuous_of_mem {H : Set <| X → α} (h : H.Equicontinuous)
{f : X → α} (hf : f ∈ H) : Continuous f :=
h.Continuous ⟨f, hf⟩
#align set.equicontinuous.continuous_of_mem Set.Equicontinuous.continuous_of_mem
-/- warning: uniform_equicontinuous.uniform_continuous -> UniformEquicontinuous.uniformContinuous is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) -> (forall (i : ι), UniformContinuous.{u3, u2} β α _inst_5 _inst_4 (F i))
-but is expected to have type
- forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) -> (forall (i : ι), UniformContinuous.{u1, u2} β α _inst_5 _inst_4 (F i))
-Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.uniform_continuous UniformEquicontinuous.uniformContinuousₓ'. -/
/-- Each function of a uniformly equicontinuous family is uniformly continuous. -/
theorem UniformEquicontinuous.uniformContinuous {F : ι → β → α} (h : UniformEquicontinuous F)
(i : ι) : UniformContinuous (F i) := fun U hU =>
mem_map.mpr (mem_of_superset (h U hU) fun xy hxy => hxy i)
#align uniform_equicontinuous.uniform_continuous UniformEquicontinuous.uniformContinuous
-/- warning: set.uniform_equicontinuous.uniform_continuous_of_mem -> Set.UniformEquicontinuous.uniformContinuous_of_mem is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] {H : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 H) -> (forall {f : β -> α}, (Membership.Mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.hasMem.{max u2 u1} (β -> α)) f H) -> (UniformContinuous.{u2, u1} β α _inst_5 _inst_4 f))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {H : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 H) -> (forall {f : β -> α}, (Membership.mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.instMembershipSet.{max u2 u1} (β -> α)) f H) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 f))
-Case conversion may be inaccurate. Consider using '#align set.uniform_equicontinuous.uniform_continuous_of_mem Set.UniformEquicontinuous.uniformContinuous_of_memₓ'. -/
protected theorem Set.UniformEquicontinuous.uniformContinuous_of_mem {H : Set <| β → α}
(h : H.UniformEquicontinuous) {f : β → α} (hf : f ∈ H) : UniformContinuous f :=
h.UniformContinuous ⟨f, hf⟩
#align set.uniform_equicontinuous.uniform_continuous_of_mem Set.UniformEquicontinuous.uniformContinuous_of_mem
-/- warning: equicontinuous_at.comp -> EquicontinuousAt.comp is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {κ : Type.{u2}} {X : Type.{u3}} {α : Type.{u4}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u4} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u1, u3, u4} ι X α _inst_1 _inst_4 F x₀) -> (forall (u : κ -> ι), EquicontinuousAt.{u2, u3, u4} κ X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u1, max (succ u3) (succ u4)} κ ι (X -> α) F u) x₀)
-but is expected to have type
- forall {ι : Type.{u4}} {κ : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u4, u3, u2} ι X α _inst_1 _inst_4 F x₀) -> (forall (u : κ -> ι), EquicontinuousAt.{u1, u3, u2} κ X α _inst_1 _inst_4 (Function.comp.{succ u1, succ u4, max (succ u2) (succ u3)} κ ι (X -> α) F u) x₀)
-Case conversion may be inaccurate. Consider using '#align equicontinuous_at.comp EquicontinuousAt.compₓ'. -/
/-- Taking sub-families preserves equicontinuity at a point. -/
theorem EquicontinuousAt.comp {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (u : κ → ι) :
EquicontinuousAt (F ∘ u) x₀ := fun U hU => (h U hU).mono fun x H k => H (u k)
#align equicontinuous_at.comp EquicontinuousAt.comp
-/- warning: set.equicontinuous_at.mono -> Set.EquicontinuousAt.mono is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)} {H' : Set.{max u1 u2} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 H x₀) -> (HasSubset.Subset.{max u1 u2} (Set.{max u1 u2} (X -> α)) (Set.hasSubset.{max u1 u2} (X -> α)) H' H) -> (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 H' x₀)
-but is expected to have type
- forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)} {H' : Set.{max u2 u1} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 H x₀) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (X -> α)) (Set.instHasSubsetSet.{max u2 u1} (X -> α)) H' H) -> (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 H' x₀)
-Case conversion may be inaccurate. Consider using '#align set.equicontinuous_at.mono Set.EquicontinuousAt.monoₓ'. -/
protected theorem Set.EquicontinuousAt.mono {H H' : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) (hH : H' ⊆ H) : H'.EquicontinuousAt x₀ :=
h.comp (inclusion hH)
#align set.equicontinuous_at.mono Set.EquicontinuousAt.mono
-/- warning: equicontinuous.comp -> Equicontinuous.comp is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {κ : Type.{u2}} {X : Type.{u3}} {α : Type.{u4}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u4} α] {F : ι -> X -> α}, (Equicontinuous.{u1, u3, u4} ι X α _inst_1 _inst_4 F) -> (forall (u : κ -> ι), Equicontinuous.{u2, u3, u4} κ X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u1, max (succ u3) (succ u4)} κ ι (X -> α) F u))
-but is expected to have type
- forall {ι : Type.{u4}} {κ : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {F : ι -> X -> α}, (Equicontinuous.{u4, u3, u2} ι X α _inst_1 _inst_4 F) -> (forall (u : κ -> ι), Equicontinuous.{u1, u3, u2} κ X α _inst_1 _inst_4 (Function.comp.{succ u1, succ u4, max (succ u2) (succ u3)} κ ι (X -> α) F u))
-Case conversion may be inaccurate. Consider using '#align equicontinuous.comp Equicontinuous.compₓ'. -/
/-- Taking sub-families preserves equicontinuity. -/
theorem Equicontinuous.comp {F : ι → X → α} (h : Equicontinuous F) (u : κ → ι) :
Equicontinuous (F ∘ u) := fun x => (h x).comp u
#align equicontinuous.comp Equicontinuous.comp
-/- warning: set.equicontinuous.mono -> Set.Equicontinuous.mono is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)} {H' : Set.{max u1 u2} (X -> α)}, (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 H) -> (HasSubset.Subset.{max u1 u2} (Set.{max u1 u2} (X -> α)) (Set.hasSubset.{max u1 u2} (X -> α)) H' H) -> (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 H')
-but is expected to have type
- forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)} {H' : Set.{max u2 u1} (X -> α)}, (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 H) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (X -> α)) (Set.instHasSubsetSet.{max u2 u1} (X -> α)) H' H) -> (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 H')
-Case conversion may be inaccurate. Consider using '#align set.equicontinuous.mono Set.Equicontinuous.monoₓ'. -/
protected theorem Set.Equicontinuous.mono {H H' : Set <| X → α} (h : H.Equicontinuous)
(hH : H' ⊆ H) : H'.Equicontinuous :=
h.comp (inclusion hH)
#align set.equicontinuous.mono Set.Equicontinuous.mono
-/- warning: uniform_equicontinuous.comp -> UniformEquicontinuous.comp is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {κ : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u1, u3, u4} ι α β _inst_4 _inst_5 F) -> (forall (u : κ -> ι), UniformEquicontinuous.{u2, u3, u4} κ α β _inst_4 _inst_5 (Function.comp.{succ u2, succ u1, max (succ u4) (succ u3)} κ ι (β -> α) F u))
-but is expected to have type
- forall {ι : Type.{u4}} {κ : Type.{u1}} {α : Type.{u3}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u2} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u4, u3, u2} ι α β _inst_4 _inst_5 F) -> (forall (u : κ -> ι), UniformEquicontinuous.{u1, u3, u2} κ α β _inst_4 _inst_5 (Function.comp.{succ u1, succ u4, max (succ u2) (succ u3)} κ ι (β -> α) F u))
-Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.comp UniformEquicontinuous.compₓ'. -/
/-- Taking sub-families preserves uniform equicontinuity. -/
theorem UniformEquicontinuous.comp {F : ι → β → α} (h : UniformEquicontinuous F) (u : κ → ι) :
UniformEquicontinuous (F ∘ u) := fun U hU => (h U hU).mono fun x H k => H (u k)
#align uniform_equicontinuous.comp UniformEquicontinuous.comp
-/- warning: set.uniform_equicontinuous.mono -> Set.UniformEquicontinuous.mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] {H : Set.{max u2 u1} (β -> α)} {H' : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 H) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (β -> α)) (Set.hasSubset.{max u2 u1} (β -> α)) H' H) -> (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 H')
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {H : Set.{max u2 u1} (β -> α)} {H' : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 H) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (β -> α)) (Set.instHasSubsetSet.{max u2 u1} (β -> α)) H' H) -> (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 H')
-Case conversion may be inaccurate. Consider using '#align set.uniform_equicontinuous.mono Set.UniformEquicontinuous.monoₓ'. -/
protected theorem Set.UniformEquicontinuous.mono {H H' : Set <| β → α} (h : H.UniformEquicontinuous)
(hH : H' ⊆ H) : H'.UniformEquicontinuous :=
h.comp (inclusion hH)
#align set.uniform_equicontinuous.mono Set.UniformEquicontinuous.mono
-/- warning: equicontinuous_at_iff_range -> equicontinuousAt_iff_range is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{max u2 u3, u2, u3} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) X α _inst_1 _inst_4 ((fun (a : Type.{max u2 u3}) (b : Sort.{max (succ u2) (succ u3)}) [self : HasLiftT.{succ (max u2 u3), max (succ u2) (succ u3)} a b] => self.0) (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (HasLiftT.mk.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (CoeTCₓ.coe.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeBase.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeSubtype.{max (succ u2) (succ u3)} (X -> α) (fun (x : X -> α) => Membership.Mem.{max u2 u3, max u2 u3} (X -> α) (Set.{max u2 u3} (X -> α)) (Set.hasMem.{max u2 u3} (X -> α)) x (Set.range.{max u2 u3, succ u1} (X -> α) ι F))))))) x₀)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{max u2 u1, u2, u1} (Subtype.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))) X α _inst_1 _inst_4 (Subtype.val.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))) x₀)
-Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_range equicontinuousAt_iff_rangeₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff `range 𝓕` is equicontinuous at `x₀`,
i.e the family `coe : range F → X → α` is equicontinuous at `x₀`. -/
theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
@@ -331,12 +241,6 @@ theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
h.comp (rangeFactorization F)⟩
#align equicontinuous_at_iff_range equicontinuousAt_iff_range
-/- warning: equicontinuous_iff_range -> equicontinuous_iff_range is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{max u2 u3, u2, u3} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) X α _inst_1 _inst_4 ((fun (a : Type.{max u2 u3}) (b : Sort.{max (succ u2) (succ u3)}) [self : HasLiftT.{succ (max u2 u3), max (succ u2) (succ u3)} a b] => self.0) (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (HasLiftT.mk.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (CoeTCₓ.coe.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeBase.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeSubtype.{max (succ u2) (succ u3)} (X -> α) (fun (x : X -> α) => Membership.Mem.{max u2 u3, max u2 u3} (X -> α) (Set.{max u2 u3} (X -> α)) (Set.hasMem.{max u2 u3} (X -> α)) x (Set.range.{max u2 u3, succ u1} (X -> α) ι F))))))))
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Equicontinuous.{max u2 u1, u2, u1} (Subtype.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))) X α _inst_1 _inst_4 (Subtype.val.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))))
-Case conversion may be inaccurate. Consider using '#align equicontinuous_iff_range equicontinuous_iff_rangeₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous iff `range 𝓕` is equicontinuous,
i.e the family `coe : range F → X → α` is equicontinuous. -/
theorem equicontinuous_iff_range {F : ι → X → α} :
@@ -344,12 +248,6 @@ theorem equicontinuous_iff_range {F : ι → X → α} :
forall_congr' fun x₀ => equicontinuousAt_iff_range
#align equicontinuous_iff_range equicontinuous_iff_range
-/- warning: uniform_equicontinuous_at_iff_range -> uniformEquicontinuous_at_iff_range is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{max u3 u2, u2, u3} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) α β _inst_4 _inst_5 ((fun (a : Type.{max u3 u2}) (b : Sort.{max (succ u3) (succ u2)}) [self : HasLiftT.{succ (max u3 u2), max (succ u3) (succ u2)} a b] => self.0) (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (HasLiftT.mk.{succ (max u3 u2), max (succ u3) (succ u2)} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (CoeTCₓ.coe.{succ (max u3 u2), max (succ u3) (succ u2)} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (coeBase.{succ (max u3 u2), max (succ u3) (succ u2)} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (coeSubtype.{max (succ u3) (succ u2)} (β -> α) (fun (x : β -> α) => Membership.Mem.{max u3 u2, max u3 u2} (β -> α) (Set.{max u3 u2} (β -> α)) (Set.hasMem.{max u3 u2} (β -> α)) x (Set.range.{max u3 u2, succ u1} (β -> α) ι F))))))))
-but is expected to have type
- forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{max u2 u1, u2, u1} (Subtype.{succ (max u2 u1)} (β -> α) (fun (x : β -> α) => Membership.mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.instMembershipSet.{max u2 u1} (β -> α)) x (Set.range.{max u2 u1, succ u3} (β -> α) ι F))) α β _inst_4 _inst_5 (Subtype.val.{succ (max u2 u1)} (β -> α) (fun (x : β -> α) => Membership.mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.instMembershipSet.{max u2 u1} (β -> α)) x (Set.range.{max u2 u1, succ u3} (β -> α) ι F))))
-Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous_at_iff_range uniformEquicontinuous_at_iff_rangeₓ'. -/
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff `range 𝓕` is uniformly equicontinuous,
i.e the family `coe : range F → β → α` is uniformly equicontinuous. -/
theorem uniformEquicontinuous_at_iff_range {F : ι → β → α} :
@@ -362,12 +260,6 @@ section
open UniformFun
-/- warning: equicontinuous_at_iff_continuous_at -> equicontinuousAt_iff_continuousAt is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
-Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAtₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff the function `swap 𝓕 : X → ι → α` is
continuous at `x₀` *when `ι → α` is equipped with the topology of uniform convergence*. This is
very useful for developping the equicontinuity API, but it should not be used directly for other
@@ -377,12 +269,6 @@ theorem equicontinuousAt_iff_continuousAt {F : ι → X → α} {x₀ : X} :
rw [ContinuousAt, (UniformFun.hasBasis_nhds ι α _).tendsto_right_iff] <;> rfl
#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAt
-/- warning: equicontinuous_iff_continuous -> equicontinuous_iff_continuous is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
-Case conversion may be inaccurate. Consider using '#align equicontinuous_iff_continuous equicontinuous_iff_continuousₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous iff the function `swap 𝓕 : X → ι → α` is
continuous *when `ι → α` is equipped with the topology of uniform convergence*. This is
very useful for developping the equicontinuity API, but it should not be used directly for other
@@ -392,12 +278,6 @@ theorem equicontinuous_iff_continuous {F : ι → X → α} :
simp_rw [Equicontinuous, continuous_iff_continuousAt, equicontinuousAt_iff_continuousAt]
#align equicontinuous_iff_continuous equicontinuous_iff_continuous
-/- warning: uniform_equicontinuous_iff_uniform_continuous -> uniformEquicontinuous_iff_uniformContinuous is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u3, max u1 u2} β (UniformFun.{u1, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u1, u2} ι α _inst_4) (Function.comp.{succ u3, max (succ u1) (succ u2), max (succ u1) (succ u2)} β (ι -> α) (UniformFun.{u1, u2} ι α) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) => (ι -> α) -> (UniformFun.{u1, u2} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (UniformFun.ofFun.{u1, u2} ι α)) (Function.swap.{succ u1, succ u3, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
-but is expected to have type
- forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u1, max u3 u2} β (UniformFun.{u3, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u3, u2} ι α _inst_4) (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u3) (succ u2)} β (ι -> α) (UniformFun.{u3, u2} ι α) (FunLike.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> α) => UniformFun.{u3, u2} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (UniformFun.ofFun.{u3, u2} ι α)) (Function.swap.{succ u3, succ u1, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
-Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuousₓ'. -/
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff the function `swap 𝓕 : β → ι → α` is
uniformly continuous *when `ι → α` is equipped with the uniform structure of uniform convergence*.
This is very useful for developping the equicontinuity API, but it should not be used directly
@@ -407,12 +287,6 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
rw [UniformContinuous, (UniformFun.hasBasis_uniformity ι α).tendsto_right_iff] <;> rfl
#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuous
-/- warning: filter.has_basis.equicontinuous_at_iff_left -> Filter.HasBasis.equicontinuousAt_iff_left is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u2} X)} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u2, succ u4} X κ (nhds.{u2} X _inst_1 x₀) p s) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u3} (Prod.{u3, u3} α α)), (Membership.Mem.{u3, u3} (Set.{u3} (Prod.{u3, u3} α α)) (Filter.{u3} (Prod.{u3, u3} α α)) (Filter.hasMem.{u3} (Prod.{u3, u3} α α)) U (uniformity.{u3} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x (s k)) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) U))))))
-but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u1} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} X)} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} X κ (nhds.{u3} X _inst_1 x₀) p s) -> (Iff (EquicontinuousAt.{u2, u3, u1} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => And (p k) (forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x₀) (F i x)) U))))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_leftₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ (k : _)(_ : p k), ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U :=
@@ -422,12 +296,6 @@ theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop
rfl
#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_left
-/- warning: filter.has_basis.equicontinuous_at_iff_right -> Filter.HasBasis.equicontinuousAt_iff_right is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} α α) κ (uniformity.{u3} α _inst_4) p s) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (k : κ), (p k) -> (Filter.Eventually.{u2} X (fun (x : X) => forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) (s k)) (nhds.{u2} X _inst_1 x₀))))
-but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u3} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} α α) κ (uniformity.{u3} α _inst_4) p s) -> (Iff (EquicontinuousAt.{u2, u1, u3} ι X α _inst_1 _inst_4 F x₀) (forall (k : κ), (p k) -> (Filter.Eventually.{u1} X (fun (x : X) => forall (i : ι), Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) (s k)) (nhds.{u1} X _inst_1 x₀))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_rightₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Prop} {s : κ → Set (α × α)}
{F : ι → X → α} {x₀ : X} (hα : (𝓤 α).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ k, p k → ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ s k :=
@@ -437,9 +305,6 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Pro
rfl
#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_right
-/- warning: filter.has_basis.equicontinuous_at_iff -> Filter.HasBasis.equicontinuousAt_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iffₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -451,12 +316,6 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ
rfl
#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iff
-/- warning: filter.has_basis.uniform_equicontinuous_iff_left -> Filter.HasBasis.uniformEquicontinuous_iff_left is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} β β))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ (uniformity.{u3} β _inst_5) p s) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (U : Set.{u2} (Prod.{u2, u2} α α)), (Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} α α)) (Filter.{u2} (Prod.{u2, u2} α α)) (Filter.hasMem.{u2} (Prod.{u2, u2} α α)) U (uniformity.{u2} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : β) (y : β), (Membership.Mem.{u3, u3} (Prod.{u3, u3} β β) (Set.{u3} (Prod.{u3, u3} β β)) (Set.hasMem.{u3} (Prod.{u3, u3} β β)) (Prod.mk.{u3, u3} β β x y) (s k)) -> (forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) U))))))
-but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u1}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} β β))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ (uniformity.{u3} β _inst_5) p s) -> (Iff (UniformEquicontinuous.{u2, u1, u3} ι α β _inst_4 _inst_5 F) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => And (p k) (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 k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x) (F i y)) U))))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_leftₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
@@ -468,12 +327,6 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ →
rfl
#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_left
-/- warning: filter.has_basis.uniform_equicontinuous_iff_right -> Filter.HasBasis.uniformEquicontinuous_iff_right is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ (uniformity.{u2} α _inst_4) p s) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k : κ), (p k) -> (Filter.Eventually.{u3} (Prod.{u3, u3} β β) (fun (xy : Prod.{u3, u3} β β) => forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i (Prod.fst.{u3, u3} β β xy)) (F i (Prod.snd.{u3, u3} β β xy))) (s k)) (uniformity.{u3} β _inst_5))))
-but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u1} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} α α) κ (uniformity.{u3} α _inst_4) p s) -> (Iff (UniformEquicontinuous.{u2, u3, u1} ι α β _inst_4 _inst_5 F) (forall (k : κ), (p k) -> (Filter.Eventually.{u1} (Prod.{u1, u1} β β) (fun (xy : Prod.{u1, u1} β β) => forall (i : ι), Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i (Prod.fst.{u1, u1} β β xy)) (F i (Prod.snd.{u1, u1} β β xy))) (s k)) (uniformity.{u1} β _inst_5))))
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_rightₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ → Prop}
{s : κ → Set (α × α)} {F : ι → β → α} (hα : (𝓤 α).HasBasis p s) :
UniformEquicontinuous F ↔ ∀ k, p k → ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ s k :=
@@ -483,9 +336,6 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ
rfl
#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_right
-/- warning: filter.has_basis.uniform_equicontinuous_iff -> Filter.HasBasis.uniformEquicontinuous_iff is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iffₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -498,12 +348,6 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
rfl
#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iff
-/- warning: uniform_inducing.equicontinuous_at_iff -> UniformInducing.equicontinuousAt_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F) x₀))
-but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3100 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3100 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102) u) F) x₀))
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iffₓ'. -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
equicontinuous at `x₀`. -/
@@ -515,12 +359,6 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
rfl
#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iff
-/- warning: uniform_inducing.equicontinuous_iff -> UniformInducing.equicontinuous_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F)))
-but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3236 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3236 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238) u) F)))
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is equicontinuous. -/
@@ -532,12 +370,6 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
rw [hu.equicontinuous_at_iff]
#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iff
-/- warning: uniform_inducing.uniform_equicontinuous_iff -> UniformInducing.uniformEquicontinuous_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u4}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] [_inst_6 : UniformSpace.{u4} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u2, u4} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u1, u4, u3} ι γ β _inst_6 _inst_5 (Function.comp.{succ u1, max (succ u3) (succ u2), max (succ u3) (succ u4)} ι (β -> α) (β -> γ) (Function.comp.{succ u3, succ u2, succ u4} β α γ u) F)))
-but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3423 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3423 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425) u) F)))
-Case conversion may be inaccurate. Consider using '#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iffₓ'. -/
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
equicontinuous. -/
@@ -550,12 +382,6 @@ theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α
rfl
#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iff
-/- warning: equicontinuous_at.closure' -> EquicontinuousAt.closure' is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_4 : UniformSpace.{u3} α] {A : Set.{u2} Y} {u : Y -> X -> α} {x₀ : X}, (EquicontinuousAt.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x A))))))) x₀) -> (Continuous.{u2, max u1 u3} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u1, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) u) -> (EquicontinuousAt.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x (closure.{u2} Y _inst_2 A)))))))) x₀)
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} Y] [_inst_4 : UniformSpace.{u1} α] {A : Set.{u3} Y} {u : Y -> X -> α} {x₀ : X}, (EquicontinuousAt.{u3, u2, u1} (Set.Elem.{u3} Y A) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y A) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x A))) x₀) -> (Continuous.{u3, max u2 u1} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) u) -> (EquicontinuousAt.{u3, u2, u1} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x (closure.{u3} Y _inst_2 A)))) x₀)
-Case conversion may be inaccurate. Consider using '#align equicontinuous_at.closure' EquicontinuousAt.closure'ₓ'. -/
/-- A version of `equicontinuous_at.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
@@ -573,12 +399,6 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
exact Continuous.prod_mk ((continuous_apply x₀).comp hu) ((continuous_apply x).comp hu)
#align equicontinuous_at.closure' EquicontinuousAt.closure'
-/- warning: equicontinuous_at.closure -> EquicontinuousAt.closure is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {A : Set.{max u1 u2} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 A x₀) -> (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 (closure.{max u1 u2} (X -> α) (Pi.topologicalSpace.{u1, u2} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) A) x₀)
-but is expected to have type
- forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {A : Set.{max u2 u1} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 A x₀) -> (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 (closure.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) A) x₀)
-Case conversion may be inaccurate. Consider using '#align equicontinuous_at.closure EquicontinuousAt.closureₓ'. -/
/-- If a set of functions is equicontinuous at some `x₀`, its closure for the product topology is
also equicontinuous at `x₀`. -/
theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
@@ -586,12 +406,6 @@ theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.Equico
@EquicontinuousAt.closure' _ _ _ _ _ _ _ id _ hA continuous_id
#align equicontinuous_at.closure EquicontinuousAt.closure
-/- warning: filter.tendsto.continuous_at_of_equicontinuous_at -> Filter.Tendsto.continuousAt_of_equicontinuousAt is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {l : Filter.{u1} ι} [_inst_7 : Filter.NeBot.{u1} ι l] {F : ι -> X -> α} {f : X -> α} {x₀ : X}, (Filter.Tendsto.{u1, max u2 u3} ι (X -> α) F l (nhds.{max u2 u3} (X -> α) (Pi.topologicalSpace.{u2, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) f)) -> (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) -> (ContinuousAt.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) f x₀)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {l : Filter.{u3} ι} [_inst_7 : Filter.NeBot.{u3} ι l] {F : ι -> X -> α} {f : X -> α} {x₀ : X}, (Filter.Tendsto.{u3, max u2 u1} ι (X -> α) F l (nhds.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) f)) -> (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) -> (ContinuousAt.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f x₀)
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.continuous_at_of_equicontinuous_at Filter.Tendsto.continuousAt_of_equicontinuousAtₓ'. -/
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous at some `x₀ : X`, then the limit is continuous at `x₀`. -/
theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.ne_bot] {F : ι → X → α}
@@ -601,12 +415,6 @@ theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.ne_bo
⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
#align filter.tendsto.continuous_at_of_equicontinuous_at Filter.Tendsto.continuousAt_of_equicontinuousAt
-/- warning: equicontinuous.closure' -> Equicontinuous.closure' is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_4 : UniformSpace.{u3} α] {A : Set.{u2} Y} {u : Y -> X -> α}, (Equicontinuous.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x A)))))))) -> (Continuous.{u2, max u1 u3} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u1, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) u) -> (Equicontinuous.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x (closure.{u2} Y _inst_2 A)))))))))
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} Y] [_inst_4 : UniformSpace.{u1} α] {A : Set.{u3} Y} {u : Y -> X -> α}, (Equicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y A) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y A) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x A)))) -> (Continuous.{u3, max u2 u1} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) u) -> (Equicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x (closure.{u3} Y _inst_2 A)))))
-Case conversion may be inaccurate. Consider using '#align equicontinuous.closure' Equicontinuous.closure'ₓ'. -/
/-- A version of `equicontinuous.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
@@ -616,24 +424,12 @@ theorem Equicontinuous.closure' {A : Set Y} {u : Y → X → α}
Equicontinuous (u ∘ coe : closure A → X → α) := fun x => (hA x).closure' hu
#align equicontinuous.closure' Equicontinuous.closure'
-/- warning: equicontinuous.closure -> Equicontinuous.closure is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {A : Set.{max u1 u2} (X -> α)}, (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 A) -> (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 (closure.{max u1 u2} (X -> α) (Pi.topologicalSpace.{u1, u2} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) A))
-but is expected to have type
- forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {A : Set.{max u2 u1} (X -> α)}, (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 A) -> (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 (closure.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) A))
-Case conversion may be inaccurate. Consider using '#align equicontinuous.closure Equicontinuous.closureₓ'. -/
/-- If a set of functions is equicontinuous, its closure for the product topology is also
equicontinuous. -/
theorem Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
(closure A).Equicontinuous := fun x => (hA x).closure
#align equicontinuous.closure Equicontinuous.closure
-/- warning: filter.tendsto.continuous_of_equicontinuous_at -> Filter.Tendsto.continuous_of_equicontinuous_at is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {l : Filter.{u1} ι} [_inst_7 : Filter.NeBot.{u1} ι l] {F : ι -> X -> α} {f : X -> α}, (Filter.Tendsto.{u1, max u2 u3} ι (X -> α) F l (nhds.{max u2 u3} (X -> α) (Pi.topologicalSpace.{u2, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) f)) -> (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) -> (Continuous.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) f)
-but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {l : Filter.{u3} ι} [_inst_7 : Filter.NeBot.{u3} ι l] {F : ι -> X -> α} {f : X -> α}, (Filter.Tendsto.{u3, max u2 u1} ι (X -> α) F l (nhds.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) f)) -> (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) -> (Continuous.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f)
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous_atₓ'. -/
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous, then the limit is continuous. -/
theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.ne_bot] {F : ι → X → α}
@@ -641,12 +437,6 @@ theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.ne_bot
continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous_at
-/- warning: uniform_equicontinuous.closure' -> UniformEquicontinuous.closure' is a dubious translation:
-lean 3 declaration is
- forall {Y : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_2 : TopologicalSpace.{u1} Y] [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {A : Set.{u1} Y} {u : Y -> β -> α}, (UniformEquicontinuous.{u1, u2, u3} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) α β _inst_4 _inst_5 (Function.comp.{succ u1, succ u1, max (succ u3) (succ u2)} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (β -> α) u ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (coeSubtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x A)))))))) -> (Continuous.{u1, max u3 u2} Y (β -> α) _inst_2 (Pi.topologicalSpace.{u3, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) u) -> (UniformEquicontinuous.{u1, u2, u3} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) α β _inst_4 _inst_5 (Function.comp.{succ u1, succ u1, max (succ u3) (succ u2)} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (β -> α) u ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (coeSubtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (closure.{u1} Y _inst_2 A)))))))))
-but is expected to have type
- forall {Y : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : TopologicalSpace.{u3} Y] [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {A : Set.{u3} Y} {u : Y -> β -> α}, (UniformEquicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y A) α β _inst_4 _inst_5 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y A) Y (β -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x A)))) -> (Continuous.{u3, max u2 u1} Y (β -> α) _inst_2 (Pi.topologicalSpace.{u1, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) u) -> (UniformEquicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) α β _inst_4 _inst_5 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) Y (β -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x (closure.{u3} Y _inst_2 A)))))
-Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'ₓ'. -/
/-- A version of `uniform_equicontinuous.closure` applicable to subsets of types which embed
continuously into `β → α` with the product topology. It turns out we don't need any other condition
on the embedding than continuity, but in practice this will mostly be applied to `fun_like` types
@@ -665,12 +455,6 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
exact Continuous.prod_mk ((continuous_apply x).comp hu) ((continuous_apply y).comp hu)
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
-/- warning: uniform_equicontinuous.closure -> UniformEquicontinuous.closure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] {A : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 A) -> (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 (closure.{max u2 u1} (β -> α) (Pi.topologicalSpace.{u2, u1} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) A))
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {A : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 A) -> (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 (closure.{max u2 u1} (β -> α) (Pi.topologicalSpace.{u1, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) A))
-Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.closure UniformEquicontinuous.closureₓ'. -/
/-- If a set of functions is uniformly equicontinuous, its closure for the product topology is also
uniformly equicontinuous. -/
theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEquicontinuous) :
@@ -678,12 +462,6 @@ theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEqui
@UniformEquicontinuous.closure' _ _ _ _ _ _ _ id hA continuous_id
#align uniform_equicontinuous.closure UniformEquicontinuous.closure
-/- warning: filter.tendsto.uniform_continuous_of_uniform_equicontinuous -> Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {l : Filter.{u1} ι} [_inst_7 : Filter.NeBot.{u1} ι l] {F : ι -> β -> α} {f : β -> α}, (Filter.Tendsto.{u1, max u3 u2} ι (β -> α) F l (nhds.{max u3 u2} (β -> α) (Pi.topologicalSpace.{u3, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) f)) -> (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) -> (UniformContinuous.{u3, u2} β α _inst_5 _inst_4 f)
-but is expected to have type
- forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {l : Filter.{u3} ι} [_inst_7 : Filter.NeBot.{u3} ι l] {F : ι -> β -> α} {f : β -> α}, (Filter.Tendsto.{u3, max u2 u1} ι (β -> α) F l (nhds.{max u2 u1} (β -> α) (Pi.topologicalSpace.{u1, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) f)) -> (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 f)
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.uniform_continuous_of_uniform_equicontinuous Filter.Tendsto.uniformContinuous_of_uniformEquicontinuousₓ'. -/
/-- If `𝓕 : ι → β → α` tends to `f : β → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is uniformly equicontinuous, then the limit is uniformly continuous. -/
theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι} [l.ne_bot]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -438,10 +438,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Pro
#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_right
/- warning: filter.has_basis.equicontinuous_at_iff -> Filter.HasBasis.equicontinuousAt_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ₁ : Type.{u4}} {κ₂ : Type.{u5}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u2} X)} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u2, succ u4} X κ₁ (nhds.{u2} X _inst_1 x₀) p₁ s₁) -> (Filter.HasBasis.{u3, succ u5} (Prod.{u3, u3} α α) κ₂ (uniformity.{u3} α _inst_4) p₂ s₂) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u4} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x (s₁ k₁)) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) (s₂ k₂)))))))
-but is expected to have type
- forall {ι : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} X)} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u5} X κ₁ (nhds.{u3} X _inst_1 x₀) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (EquicontinuousAt.{u1, u3, u2} ι X α _inst_1 _inst_4 F x₀) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => And (p₁ k₁) (forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x₀) (F i x)) (s₂ k₂)))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iffₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
@@ -487,10 +484,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ
#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_right
/- warning: filter.has_basis.uniform_equicontinuous_iff -> Filter.HasBasis.uniformEquicontinuous_iff is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ₁ : Type.{u4}} {κ₂ : Type.{u5}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} (Prod.{u3, u3} β β))} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ₁ (uniformity.{u3} β _inst_5) p₁ s₁) -> (Filter.HasBasis.{u2, succ u5} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u4} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : β) (y : β), (Membership.Mem.{u3, u3} (Prod.{u3, u3} β β) (Set.{u3} (Prod.{u3, u3} β β)) (Set.hasMem.{u3} (Prod.{u3, u3} β β)) (Prod.mk.{u3, u3} β β x y) (s₁ k₁)) -> (forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) (s₂ k₂)))))))
-but is expected to have type
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} (Prod.{u3, u3} β β))} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u5} (Prod.{u3, u3} β β) κ₁ (uniformity.{u3} β _inst_5) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => And (p₁ k₁) (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₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) (s₂ k₂)))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iffₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -366,7 +366,7 @@ open UniformFun
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAtₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff the function `swap 𝓕 : X → ι → α` is
continuous at `x₀` *when `ι → α` is equipped with the topology of uniform convergence*. This is
@@ -381,7 +381,7 @@ theorem equicontinuousAt_iff_continuousAt {F : ι → X → α} {x₀ : X} :
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
Case conversion may be inaccurate. Consider using '#align equicontinuous_iff_continuous equicontinuous_iff_continuousₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous iff the function `swap 𝓕 : X → ι → α` is
continuous *when `ι → α` is equipped with the topology of uniform convergence*. This is
@@ -396,7 +396,7 @@ theorem equicontinuous_iff_continuous {F : ι → X → α} :
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u3, max u1 u2} β (UniformFun.{u1, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u1, u2} ι α _inst_4) (Function.comp.{succ u3, max (succ u1) (succ u2), max (succ u1) (succ u2)} β (ι -> α) (UniformFun.{u1, u2} ι α) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) => (ι -> α) -> (UniformFun.{u1, u2} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (UniformFun.ofFun.{u1, u2} ι α)) (Function.swap.{succ u1, succ u3, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
but is expected to have type
- forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u1, max u3 u2} β (UniformFun.{u3, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u3, u2} ι α _inst_4) (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u3) (succ u2)} β (ι -> α) (UniformFun.{u3, u2} ι α) (FunLike.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> α) => UniformFun.{u3, u2} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (UniformFun.ofFun.{u3, u2} ι α)) (Function.swap.{succ u3, succ u1, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
+ forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u1, max u3 u2} β (UniformFun.{u3, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u3, u2} ι α _inst_4) (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u3) (succ u2)} β (ι -> α) (UniformFun.{u3, u2} ι α) (FunLike.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> α) => UniformFun.{u3, u2} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (UniformFun.ofFun.{u3, u2} ι α)) (Function.swap.{succ u3, succ u1, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuousₓ'. -/
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff the function `swap 𝓕 : β → ι → α` is
uniformly continuous *when `ι → α` is equipped with the uniform structure of uniform convergence*.
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -508,7 +508,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F) x₀))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3104 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3104) u) F) x₀))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3100 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3100 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102) u) F) x₀))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iffₓ'. -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
@@ -525,7 +525,7 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3240 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3240) u) F)))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3236 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3236 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
@@ -542,7 +542,7 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u4}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] [_inst_6 : UniformSpace.{u4} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u2, u4} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u1, u4, u3} ι γ β _inst_6 _inst_5 (Function.comp.{succ u1, max (succ u3) (succ u2), max (succ u3) (succ u4)} ι (β -> α) (β -> γ) (Function.comp.{succ u3, succ u2, succ u4} β α γ u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3427 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3427) u) F)))
+ forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3423 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3423 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iffₓ'. -/
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
mathlib commit https://github.com/leanprover-community/mathlib/commit/730c6d4cab72b9d84fcfb9e95e8796e9cd8f40ba
@@ -508,7 +508,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F) x₀))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3103 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3105 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3103 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3105) u) F) x₀))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3104 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3102 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3104) u) F) x₀))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iffₓ'. -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
@@ -525,7 +525,7 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3239 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3241 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3239 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3241) u) F)))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3240 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3238 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3240) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
@@ -542,7 +542,7 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u4}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] [_inst_6 : UniformSpace.{u4} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u2, u4} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u1, u4, u3} ι γ β _inst_6 _inst_5 (Function.comp.{succ u1, max (succ u3) (succ u2), max (succ u3) (succ u4)} ι (β -> α) (β -> γ) (Function.comp.{succ u3, succ u2, succ u4} β α γ u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3426 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3428 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3426 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3428) u) F)))
+ forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3427 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3425 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3427) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iffₓ'. -/
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -366,7 +366,7 @@ open UniformFun
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAtₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff the function `swap 𝓕 : X → ι → α` is
continuous at `x₀` *when `ι → α` is equipped with the topology of uniform convergence*. This is
@@ -381,7 +381,7 @@ theorem equicontinuousAt_iff_continuousAt {F : ι → X → α} {x₀ : X} :
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
but is expected to have type
- forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
Case conversion may be inaccurate. Consider using '#align equicontinuous_iff_continuous equicontinuous_iff_continuousₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous iff the function `swap 𝓕 : X → ι → α` is
continuous *when `ι → α` is equipped with the topology of uniform convergence*. This is
@@ -396,7 +396,7 @@ theorem equicontinuous_iff_continuous {F : ι → X → α} :
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u3, max u1 u2} β (UniformFun.{u1, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u1, u2} ι α _inst_4) (Function.comp.{succ u3, max (succ u1) (succ u2), max (succ u1) (succ u2)} β (ι -> α) (UniformFun.{u1, u2} ι α) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) => (ι -> α) -> (UniformFun.{u1, u2} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (UniformFun.ofFun.{u1, u2} ι α)) (Function.swap.{succ u1, succ u3, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
but is expected to have type
- forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u1, max u3 u2} β (UniformFun.{u3, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u3, u2} ι α _inst_4) (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u3) (succ u2)} β (ι -> α) (UniformFun.{u3, u2} ι α) (FunLike.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι -> α) => UniformFun.{u3, u2} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (UniformFun.ofFun.{u3, u2} ι α)) (Function.swap.{succ u3, succ u1, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
+ forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u1, max u3 u2} β (UniformFun.{u3, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u3, u2} ι α _inst_4) (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u3) (succ u2)} β (ι -> α) (UniformFun.{u3, u2} ι α) (FunLike.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> α) => UniformFun.{u3, u2} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (UniformFun.ofFun.{u3, u2} ι α)) (Function.swap.{succ u3, succ u1, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuousₓ'. -/
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff the function `swap 𝓕 : β → ι → α` is
uniformly continuous *when `ι → α` is equipped with the uniform structure of uniform convergence*.
@@ -508,7 +508,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F) x₀))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3088 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3090 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3088 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3090) u) F) x₀))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3103 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3105 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3103 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3105) u) F) x₀))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iffₓ'. -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
@@ -525,7 +525,7 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3224 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3226 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3224 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3226) u) F)))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3239 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3241 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3239 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3241) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
@@ -542,7 +542,7 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u4}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] [_inst_6 : UniformSpace.{u4} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u2, u4} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u1, u4, u3} ι γ β _inst_6 _inst_5 (Function.comp.{succ u1, max (succ u3) (succ u2), max (succ u3) (succ u4)} ι (β -> α) (β -> γ) (Function.comp.{succ u3, succ u2, succ u4} β α γ u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3411 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3413 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3411 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3413) u) F)))
+ forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3426 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3428 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3426 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3428) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iffₓ'. -/
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
mathlib commit https://github.com/leanprover-community/mathlib/commit/641b6a82006416ec431b2987b354af9311fed4f2
@@ -411,7 +411,7 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u2} X)} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u2, succ u4} X κ (nhds.{u2} X _inst_1 x₀) p s) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u3} (Prod.{u3, u3} α α)), (Membership.Mem.{u3, u3} (Set.{u3} (Prod.{u3, u3} α α)) (Filter.{u3} (Prod.{u3, u3} α α)) (Filter.hasMem.{u3} (Prod.{u3, u3} α α)) U (uniformity.{u3} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x (s k)) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) U))))))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u1} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} X)} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} X κ (nhds.{u3} X _inst_1 x₀) p s) -> (Iff (EquicontinuousAt.{u2, u3, u1} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x₀) (F i x)) U))))))
+ forall {ι : Type.{u2}} {X : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u1} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} X)} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} X κ (nhds.{u3} X _inst_1 x₀) p s) -> (Iff (EquicontinuousAt.{u2, u3, u1} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => And (p k) (forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x₀) (F i x)) U))))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_leftₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
@@ -441,7 +441,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Pro
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ₁ : Type.{u4}} {κ₂ : Type.{u5}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u2} X)} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u2, succ u4} X κ₁ (nhds.{u2} X _inst_1 x₀) p₁ s₁) -> (Filter.HasBasis.{u3, succ u5} (Prod.{u3, u3} α α) κ₂ (uniformity.{u3} α _inst_4) p₂ s₂) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u4} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x (s₁ k₁)) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) (s₂ k₂)))))))
but is expected to have type
- forall {ι : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} X)} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u5} X κ₁ (nhds.{u3} X _inst_1 x₀) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (EquicontinuousAt.{u1, u3, u2} ι X α _inst_1 _inst_4 F x₀) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x₀) (F i x)) (s₂ k₂)))))))
+ forall {ι : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} X)} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u5} X κ₁ (nhds.{u3} X _inst_1 x₀) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (EquicontinuousAt.{u1, u3, u2} ι X α _inst_1 _inst_4 F x₀) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => And (p₁ k₁) (forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x₀) (F i x)) (s₂ k₂)))))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iffₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
@@ -458,7 +458,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} β β))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ (uniformity.{u3} β _inst_5) p s) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (U : Set.{u2} (Prod.{u2, u2} α α)), (Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} α α)) (Filter.{u2} (Prod.{u2, u2} α α)) (Filter.hasMem.{u2} (Prod.{u2, u2} α α)) U (uniformity.{u2} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : β) (y : β), (Membership.Mem.{u3, u3} (Prod.{u3, u3} β β) (Set.{u3} (Prod.{u3, u3} β β)) (Set.hasMem.{u3} (Prod.{u3, u3} β β)) (Prod.mk.{u3, u3} β β x y) (s k)) -> (forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) U))))))
but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u1}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} β β))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ (uniformity.{u3} β _inst_5) p s) -> (Iff (UniformEquicontinuous.{u2, u1, u3} ι α β _inst_4 _inst_5 F) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => 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 k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x) (F i y)) U))))))
+ forall {ι : Type.{u2}} {α : Type.{u1}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} β β))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ (uniformity.{u3} β _inst_5) p s) -> (Iff (UniformEquicontinuous.{u2, u1, u3} ι α β _inst_4 _inst_5 F) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => And (p k) (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 k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x) (F i y)) U))))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_leftₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
@@ -490,7 +490,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ₁ : Type.{u4}} {κ₂ : Type.{u5}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} (Prod.{u3, u3} β β))} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ₁ (uniformity.{u3} β _inst_5) p₁ s₁) -> (Filter.HasBasis.{u2, succ u5} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u4} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : β) (y : β), (Membership.Mem.{u3, u3} (Prod.{u3, u3} β β) (Set.{u3} (Prod.{u3, u3} β β)) (Set.hasMem.{u3} (Prod.{u3, u3} β β)) (Prod.mk.{u3, u3} β β x y) (s₁ k₁)) -> (forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) (s₂ k₂)))))))
but is expected to have type
- forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} (Prod.{u3, u3} β β))} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u5} (Prod.{u3, u3} β β) κ₁ (uniformity.{u3} β _inst_5) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => 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₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) (s₂ k₂)))))))
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} (Prod.{u3, u3} β β))} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u5} (Prod.{u3, u3} β β) κ₁ (uniformity.{u3} β _inst_5) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => And (p₁ k₁) (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₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) (s₂ k₂)))))))
Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iffₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
@@ -508,7 +508,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F) x₀))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3096 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3098 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3096 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3098) u) F) x₀))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3088 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3090 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3088 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3090) u) F) x₀))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iffₓ'. -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
@@ -525,7 +525,7 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
lean 3 declaration is
forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3235 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3237 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3235 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3237) u) F)))
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3224 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3226 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3224 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3226) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
@@ -542,7 +542,7 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
lean 3 declaration is
forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u4}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] [_inst_6 : UniformSpace.{u4} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u2, u4} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u1, u4, u3} ι γ β _inst_6 _inst_5 (Function.comp.{succ u1, max (succ u3) (succ u2), max (succ u3) (succ u4)} ι (β -> α) (β -> γ) (Function.comp.{succ u3, succ u2, succ u4} β α γ u) F)))
but is expected to have type
- forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3422 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3424 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3422 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3424) u) F)))
+ forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3411 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3413 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3411 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3413) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iffₓ'. -/
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
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: Anatole Dedecker
! This file was ported from Lean 3 source module topology.uniform_space.equicontinuity
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit ee05e9ce1322178f0c12004eb93c00d2c8c00ed2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,6 +13,9 @@ import Mathbin.Topology.UniformSpace.UniformConvergenceTopology
/-!
# Equicontinuity of a family of functions
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
Let `X` be a topological space and `α` a `uniform_space`. A family of functions `F : ι → X → α`
is said to be *equicontinuous at a point `x₀ : X`* when, for any entourage `U` in `α`, there is a
neighborhood `V` of `x₀` such that, for all `x ∈ V`, and *for all `i`*, `F i x` is `U`-close to
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -149,7 +149,7 @@ lean 3 declaration is
but is expected to have type
forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u2} (Set.{u2} X) (fun (V : Set.{u2} X) => And (Membership.mem.{u2, u2} (Set.{u2} X) (Filter.{u2} X) (instMembershipSetFilter.{u2} X) V (nhds.{u2} X _inst_1 x₀)) (forall (x : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) x V) -> (forall (y : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) y V) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x) (F i y)) U))))))
Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_pair equicontinuousAt_iff_pairₓ'. -/
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » V) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (x y «expr ∈ » V) -/
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
@@ -524,14 +524,14 @@ lean 3 declaration is
but is expected to have type
forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3235 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3237 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3235 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3237) u) F)))
Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iffₓ'. -/
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is equicontinuous. -/
theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β} (hu : UniformInducing u) :
Equicontinuous F ↔ Equicontinuous ((· ∘ ·) u ∘ F) :=
by
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]]"
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]]"
rw [hu.equicontinuous_at_iff]
#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/22131150f88a2d125713ffa0f4693e3355b1eb49
@@ -93,44 +93,62 @@ open uniformity Topology UniformConvergence
variable {ι κ X Y Z α β γ 𝓕 : Type _} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
[UniformSpace α] [UniformSpace β] [UniformSpace γ]
+#print EquicontinuousAt /-
/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
*equicontinuous at `x₀ : X`* if, for all entourage `U ∈ 𝓤 α`, there is a neighborhood `V` of `x₀`
such that, for all `x ∈ V` and for all `i : ι`, `F i x` is `U`-close to `F i x₀`. -/
def EquicontinuousAt (F : ι → X → α) (x₀ : X) : Prop :=
∀ U ∈ 𝓤 α, ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ U
#align equicontinuous_at EquicontinuousAt
+-/
+#print Set.EquicontinuousAt /-
/-- We say that a set `H : set (X → α)` of functions is equicontinuous at a point if the family
`coe : ↥H → (X → α)` is equicontinuous at that point. -/
protected abbrev Set.EquicontinuousAt (H : Set <| X → α) (x₀ : X) : Prop :=
EquicontinuousAt (coe : H → X → α) x₀
#align set.equicontinuous_at Set.EquicontinuousAt
+-/
+#print Equicontinuous /-
/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
*equicontinuous* on all of `X` if it is equicontinuous at each point of `X`. -/
def Equicontinuous (F : ι → X → α) : Prop :=
∀ x₀, EquicontinuousAt F x₀
#align equicontinuous Equicontinuous
+-/
+#print Set.Equicontinuous /-
/-- We say that a set `H : set (X → α)` of functions is equicontinuous if the family
`coe : ↥H → (X → α)` is equicontinuous. -/
protected abbrev Set.Equicontinuous (H : Set <| X → α) : Prop :=
Equicontinuous (coe : H → X → α)
#align set.equicontinuous Set.Equicontinuous
+-/
+#print UniformEquicontinuous /-
/-- A family `F : ι → β → α` of functions between uniform spaces is *uniformly equicontinuous* if,
for all entourage `U ∈ 𝓤 α`, there is an entourage `V ∈ 𝓤 β` such that, whenever `x` and `y` are
`V`-close, we have that, *for all `i : ι`*, `F i x` is `U`-close to `F i x₀`. -/
def UniformEquicontinuous (F : ι → β → α) : Prop :=
∀ U ∈ 𝓤 α, ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ U
#align uniform_equicontinuous UniformEquicontinuous
+-/
+#print Set.UniformEquicontinuous /-
/-- We say that a set `H : set (X → α)` of functions is uniformly equicontinuous if the family
`coe : ↥H → (X → α)` is uniformly equicontinuous. -/
protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
UniformEquicontinuous (coe : H → β → α)
#align set.uniform_equicontinuous Set.UniformEquicontinuous
+-/
+/- warning: equicontinuous_at_iff_pair -> equicontinuousAt_iff_pair is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u3} (Prod.{u3, u3} α α)), (Membership.Mem.{u3, u3} (Set.{u3} (Prod.{u3, u3} α α)) (Filter.{u3} (Prod.{u3, u3} α α)) (Filter.hasMem.{u3} (Prod.{u3, u3} α α)) U (uniformity.{u3} α _inst_4)) -> (Exists.{succ u2} (Set.{u2} X) (fun (V : Set.{u2} X) => Exists.{0} (Membership.Mem.{u2, u2} (Set.{u2} X) (Filter.{u2} X) (Filter.hasMem.{u2} X) V (nhds.{u2} X _inst_1 x₀)) (fun (H : Membership.Mem.{u2, u2} (Set.{u2} X) (Filter.{u2} X) (Filter.hasMem.{u2} X) V (nhds.{u2} X _inst_1 x₀)) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x V) -> (forall (y : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) y V) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x) (F i y)) U))))))
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u2} (Set.{u2} X) (fun (V : Set.{u2} X) => And (Membership.mem.{u2, u2} (Set.{u2} X) (Filter.{u2} X) (instMembershipSetFilter.{u2} X) V (nhds.{u2} X _inst_1 x₀)) (forall (x : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) x V) -> (forall (y : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) y V) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x) (F i y)) U))))))
+Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_pair equicontinuousAt_iff_pairₓ'. -/
/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (x y «expr ∈ » V) -/
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
@@ -146,12 +164,24 @@ theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
filter_upwards [hV]using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
#align equicontinuous_at_iff_pair equicontinuousAt_iff_pair
+/- warning: uniform_equicontinuous.equicontinuous -> UniformEquicontinuous.equicontinuous is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) -> (Equicontinuous.{u1, u3, u2} ι β α (UniformSpace.toTopologicalSpace.{u3} β _inst_5) _inst_4 F)
+but is expected to have type
+ forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) -> (Equicontinuous.{u3, u1, u2} ι β α (UniformSpace.toTopologicalSpace.{u1} β _inst_5) _inst_4 F)
+Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.equicontinuous UniformEquicontinuous.equicontinuousₓ'. -/
/-- Uniform equicontinuity implies equicontinuity. -/
theorem UniformEquicontinuous.equicontinuous {F : ι → β → α} (h : UniformEquicontinuous F) :
Equicontinuous F := fun x₀ U hU =>
mem_of_superset (ball_mem_nhds x₀ (h U hU)) fun x hx i => hx i
#align uniform_equicontinuous.equicontinuous UniformEquicontinuous.equicontinuous
+/- warning: equicontinuous_at.continuous_at -> EquicontinuousAt.continuousAt is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) -> (forall (i : ι), ContinuousAt.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) (F i) x₀)
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) -> (forall (i : ι), ContinuousAt.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) (F i) x₀)
+Case conversion may be inaccurate. Consider using '#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAtₓ'. -/
/-- Each function of a family equicontinuous at `x₀` is continuous at `x₀`. -/
theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (i : ι) :
ContinuousAt (F i) x₀ := by
@@ -161,63 +191,135 @@ theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : Equi
exact mem_map.mpr (mem_of_superset (h V hV₁) fun x hx => hV₂ (hx i))
#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAt
+/- warning: set.equicontinuous_at.continuous_at_of_mem -> Set.EquicontinuousAt.continuousAt_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 H x₀) -> (forall {f : X -> α}, (Membership.Mem.{max u1 u2, max u1 u2} (X -> α) (Set.{max u1 u2} (X -> α)) (Set.hasMem.{max u1 u2} (X -> α)) f H) -> (ContinuousAt.{u1, u2} X α _inst_1 (UniformSpace.toTopologicalSpace.{u2} α _inst_4) f x₀))
+but is expected to have type
+ forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 H x₀) -> (forall {f : X -> α}, (Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) f H) -> (ContinuousAt.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f x₀))
+Case conversion may be inaccurate. Consider using '#align set.equicontinuous_at.continuous_at_of_mem Set.EquicontinuousAt.continuousAt_of_memₓ'. -/
protected theorem Set.EquicontinuousAt.continuousAt_of_mem {H : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) {f : X → α} (hf : f ∈ H) : ContinuousAt f x₀ :=
h.ContinuousAt ⟨f, hf⟩
#align set.equicontinuous_at.continuous_at_of_mem Set.EquicontinuousAt.continuousAt_of_mem
+/- warning: equicontinuous.continuous -> Equicontinuous.continuous is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) -> (forall (i : ι), Continuous.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) (F i))
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) -> (forall (i : ι), Continuous.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) (F i))
+Case conversion may be inaccurate. Consider using '#align equicontinuous.continuous Equicontinuous.continuousₓ'. -/
/-- Each function of an equicontinuous family is continuous. -/
theorem Equicontinuous.continuous {F : ι → X → α} (h : Equicontinuous F) (i : ι) :
Continuous (F i) :=
continuous_iff_continuousAt.mpr fun x => (h x).ContinuousAt i
#align equicontinuous.continuous Equicontinuous.continuous
+/- warning: set.equicontinuous.continuous_of_mem -> Set.Equicontinuous.continuous_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)}, (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 H) -> (forall {f : X -> α}, (Membership.Mem.{max u1 u2, max u1 u2} (X -> α) (Set.{max u1 u2} (X -> α)) (Set.hasMem.{max u1 u2} (X -> α)) f H) -> (Continuous.{u1, u2} X α _inst_1 (UniformSpace.toTopologicalSpace.{u2} α _inst_4) f))
+but is expected to have type
+ forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)}, (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 H) -> (forall {f : X -> α}, (Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) f H) -> (Continuous.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f))
+Case conversion may be inaccurate. Consider using '#align set.equicontinuous.continuous_of_mem Set.Equicontinuous.continuous_of_memₓ'. -/
protected theorem Set.Equicontinuous.continuous_of_mem {H : Set <| X → α} (h : H.Equicontinuous)
{f : X → α} (hf : f ∈ H) : Continuous f :=
h.Continuous ⟨f, hf⟩
#align set.equicontinuous.continuous_of_mem Set.Equicontinuous.continuous_of_mem
+/- warning: uniform_equicontinuous.uniform_continuous -> UniformEquicontinuous.uniformContinuous is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) -> (forall (i : ι), UniformContinuous.{u3, u2} β α _inst_5 _inst_4 (F i))
+but is expected to have type
+ forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) -> (forall (i : ι), UniformContinuous.{u1, u2} β α _inst_5 _inst_4 (F i))
+Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.uniform_continuous UniformEquicontinuous.uniformContinuousₓ'. -/
/-- Each function of a uniformly equicontinuous family is uniformly continuous. -/
theorem UniformEquicontinuous.uniformContinuous {F : ι → β → α} (h : UniformEquicontinuous F)
(i : ι) : UniformContinuous (F i) := fun U hU =>
mem_map.mpr (mem_of_superset (h U hU) fun xy hxy => hxy i)
#align uniform_equicontinuous.uniform_continuous UniformEquicontinuous.uniformContinuous
+/- warning: set.uniform_equicontinuous.uniform_continuous_of_mem -> Set.UniformEquicontinuous.uniformContinuous_of_mem is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] {H : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 H) -> (forall {f : β -> α}, (Membership.Mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.hasMem.{max u2 u1} (β -> α)) f H) -> (UniformContinuous.{u2, u1} β α _inst_5 _inst_4 f))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {H : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 H) -> (forall {f : β -> α}, (Membership.mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.instMembershipSet.{max u2 u1} (β -> α)) f H) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 f))
+Case conversion may be inaccurate. Consider using '#align set.uniform_equicontinuous.uniform_continuous_of_mem Set.UniformEquicontinuous.uniformContinuous_of_memₓ'. -/
protected theorem Set.UniformEquicontinuous.uniformContinuous_of_mem {H : Set <| β → α}
(h : H.UniformEquicontinuous) {f : β → α} (hf : f ∈ H) : UniformContinuous f :=
h.UniformContinuous ⟨f, hf⟩
#align set.uniform_equicontinuous.uniform_continuous_of_mem Set.UniformEquicontinuous.uniformContinuous_of_mem
+/- warning: equicontinuous_at.comp -> EquicontinuousAt.comp is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {κ : Type.{u2}} {X : Type.{u3}} {α : Type.{u4}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u4} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u1, u3, u4} ι X α _inst_1 _inst_4 F x₀) -> (forall (u : κ -> ι), EquicontinuousAt.{u2, u3, u4} κ X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u1, max (succ u3) (succ u4)} κ ι (X -> α) F u) x₀)
+but is expected to have type
+ forall {ι : Type.{u4}} {κ : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {F : ι -> X -> α} {x₀ : X}, (EquicontinuousAt.{u4, u3, u2} ι X α _inst_1 _inst_4 F x₀) -> (forall (u : κ -> ι), EquicontinuousAt.{u1, u3, u2} κ X α _inst_1 _inst_4 (Function.comp.{succ u1, succ u4, max (succ u2) (succ u3)} κ ι (X -> α) F u) x₀)
+Case conversion may be inaccurate. Consider using '#align equicontinuous_at.comp EquicontinuousAt.compₓ'. -/
/-- Taking sub-families preserves equicontinuity at a point. -/
theorem EquicontinuousAt.comp {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (u : κ → ι) :
EquicontinuousAt (F ∘ u) x₀ := fun U hU => (h U hU).mono fun x H k => H (u k)
#align equicontinuous_at.comp EquicontinuousAt.comp
+/- warning: set.equicontinuous_at.mono -> Set.EquicontinuousAt.mono is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)} {H' : Set.{max u1 u2} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 H x₀) -> (HasSubset.Subset.{max u1 u2} (Set.{max u1 u2} (X -> α)) (Set.hasSubset.{max u1 u2} (X -> α)) H' H) -> (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 H' x₀)
+but is expected to have type
+ forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)} {H' : Set.{max u2 u1} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 H x₀) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (X -> α)) (Set.instHasSubsetSet.{max u2 u1} (X -> α)) H' H) -> (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 H' x₀)
+Case conversion may be inaccurate. Consider using '#align set.equicontinuous_at.mono Set.EquicontinuousAt.monoₓ'. -/
protected theorem Set.EquicontinuousAt.mono {H H' : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) (hH : H' ⊆ H) : H'.EquicontinuousAt x₀ :=
h.comp (inclusion hH)
#align set.equicontinuous_at.mono Set.EquicontinuousAt.mono
+/- warning: equicontinuous.comp -> Equicontinuous.comp is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {κ : Type.{u2}} {X : Type.{u3}} {α : Type.{u4}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u4} α] {F : ι -> X -> α}, (Equicontinuous.{u1, u3, u4} ι X α _inst_1 _inst_4 F) -> (forall (u : κ -> ι), Equicontinuous.{u2, u3, u4} κ X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u1, max (succ u3) (succ u4)} κ ι (X -> α) F u))
+but is expected to have type
+ forall {ι : Type.{u4}} {κ : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {F : ι -> X -> α}, (Equicontinuous.{u4, u3, u2} ι X α _inst_1 _inst_4 F) -> (forall (u : κ -> ι), Equicontinuous.{u1, u3, u2} κ X α _inst_1 _inst_4 (Function.comp.{succ u1, succ u4, max (succ u2) (succ u3)} κ ι (X -> α) F u))
+Case conversion may be inaccurate. Consider using '#align equicontinuous.comp Equicontinuous.compₓ'. -/
/-- Taking sub-families preserves equicontinuity. -/
theorem Equicontinuous.comp {F : ι → X → α} (h : Equicontinuous F) (u : κ → ι) :
Equicontinuous (F ∘ u) := fun x => (h x).comp u
#align equicontinuous.comp Equicontinuous.comp
+/- warning: set.equicontinuous.mono -> Set.Equicontinuous.mono is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {H : Set.{max u1 u2} (X -> α)} {H' : Set.{max u1 u2} (X -> α)}, (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 H) -> (HasSubset.Subset.{max u1 u2} (Set.{max u1 u2} (X -> α)) (Set.hasSubset.{max u1 u2} (X -> α)) H' H) -> (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 H')
+but is expected to have type
+ forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {H : Set.{max u2 u1} (X -> α)} {H' : Set.{max u2 u1} (X -> α)}, (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 H) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (X -> α)) (Set.instHasSubsetSet.{max u2 u1} (X -> α)) H' H) -> (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 H')
+Case conversion may be inaccurate. Consider using '#align set.equicontinuous.mono Set.Equicontinuous.monoₓ'. -/
protected theorem Set.Equicontinuous.mono {H H' : Set <| X → α} (h : H.Equicontinuous)
(hH : H' ⊆ H) : H'.Equicontinuous :=
h.comp (inclusion hH)
#align set.equicontinuous.mono Set.Equicontinuous.mono
+/- warning: uniform_equicontinuous.comp -> UniformEquicontinuous.comp is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {κ : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u1, u3, u4} ι α β _inst_4 _inst_5 F) -> (forall (u : κ -> ι), UniformEquicontinuous.{u2, u3, u4} κ α β _inst_4 _inst_5 (Function.comp.{succ u2, succ u1, max (succ u4) (succ u3)} κ ι (β -> α) F u))
+but is expected to have type
+ forall {ι : Type.{u4}} {κ : Type.{u1}} {α : Type.{u3}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u2} β] {F : ι -> β -> α}, (UniformEquicontinuous.{u4, u3, u2} ι α β _inst_4 _inst_5 F) -> (forall (u : κ -> ι), UniformEquicontinuous.{u1, u3, u2} κ α β _inst_4 _inst_5 (Function.comp.{succ u1, succ u4, max (succ u2) (succ u3)} κ ι (β -> α) F u))
+Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.comp UniformEquicontinuous.compₓ'. -/
/-- Taking sub-families preserves uniform equicontinuity. -/
theorem UniformEquicontinuous.comp {F : ι → β → α} (h : UniformEquicontinuous F) (u : κ → ι) :
UniformEquicontinuous (F ∘ u) := fun U hU => (h U hU).mono fun x H k => H (u k)
#align uniform_equicontinuous.comp UniformEquicontinuous.comp
+/- warning: set.uniform_equicontinuous.mono -> Set.UniformEquicontinuous.mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] {H : Set.{max u2 u1} (β -> α)} {H' : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 H) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (β -> α)) (Set.hasSubset.{max u2 u1} (β -> α)) H' H) -> (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 H')
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {H : Set.{max u2 u1} (β -> α)} {H' : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 H) -> (HasSubset.Subset.{max u2 u1} (Set.{max u2 u1} (β -> α)) (Set.instHasSubsetSet.{max u2 u1} (β -> α)) H' H) -> (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 H')
+Case conversion may be inaccurate. Consider using '#align set.uniform_equicontinuous.mono Set.UniformEquicontinuous.monoₓ'. -/
protected theorem Set.UniformEquicontinuous.mono {H H' : Set <| β → α} (h : H.UniformEquicontinuous)
(hH : H' ⊆ H) : H'.UniformEquicontinuous :=
h.comp (inclusion hH)
#align set.uniform_equicontinuous.mono Set.UniformEquicontinuous.mono
+/- warning: equicontinuous_at_iff_range -> equicontinuousAt_iff_range is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{max u2 u3, u2, u3} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) X α _inst_1 _inst_4 ((fun (a : Type.{max u2 u3}) (b : Sort.{max (succ u2) (succ u3)}) [self : HasLiftT.{succ (max u2 u3), max (succ u2) (succ u3)} a b] => self.0) (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (HasLiftT.mk.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (CoeTCₓ.coe.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeBase.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeSubtype.{max (succ u2) (succ u3)} (X -> α) (fun (x : X -> α) => Membership.Mem.{max u2 u3, max u2 u3} (X -> α) (Set.{max u2 u3} (X -> α)) (Set.hasMem.{max u2 u3} (X -> α)) x (Set.range.{max u2 u3, succ u1} (X -> α) ι F))))))) x₀)
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{max u2 u1, u2, u1} (Subtype.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))) X α _inst_1 _inst_4 (Subtype.val.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))) x₀)
+Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_range equicontinuousAt_iff_rangeₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff `range 𝓕` is equicontinuous at `x₀`,
i.e the family `coe : range F → X → α` is equicontinuous at `x₀`. -/
theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
@@ -226,6 +328,12 @@ theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
h.comp (rangeFactorization F)⟩
#align equicontinuous_at_iff_range equicontinuousAt_iff_range
+/- warning: equicontinuous_iff_range -> equicontinuous_iff_range is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{max u2 u3, u2, u3} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) X α _inst_1 _inst_4 ((fun (a : Type.{max u2 u3}) (b : Sort.{max (succ u2) (succ u3)}) [self : HasLiftT.{succ (max u2 u3), max (succ u2) (succ u3)} a b] => self.0) (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (HasLiftT.mk.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (CoeTCₓ.coe.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeBase.{succ (max u2 u3), max (succ u2) (succ u3)} (coeSort.{succ (max u2 u3), succ (succ (max u2 u3))} (Set.{max u2 u3} (X -> α)) Type.{max u2 u3} (Set.hasCoeToSort.{max u2 u3} (X -> α)) (Set.range.{max u2 u3, succ u1} (X -> α) ι F)) (X -> α) (coeSubtype.{max (succ u2) (succ u3)} (X -> α) (fun (x : X -> α) => Membership.Mem.{max u2 u3, max u2 u3} (X -> α) (Set.{max u2 u3} (X -> α)) (Set.hasMem.{max u2 u3} (X -> α)) x (Set.range.{max u2 u3, succ u1} (X -> α) ι F))))))))
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Equicontinuous.{max u2 u1, u2, u1} (Subtype.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))) X α _inst_1 _inst_4 (Subtype.val.{succ (max u2 u1)} (X -> α) (fun (x : X -> α) => Membership.mem.{max u2 u1, max u2 u1} (X -> α) (Set.{max u2 u1} (X -> α)) (Set.instMembershipSet.{max u2 u1} (X -> α)) x (Set.range.{max u2 u1, succ u3} (X -> α) ι F))))
+Case conversion may be inaccurate. Consider using '#align equicontinuous_iff_range equicontinuous_iff_rangeₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous iff `range 𝓕` is equicontinuous,
i.e the family `coe : range F → X → α` is equicontinuous. -/
theorem equicontinuous_iff_range {F : ι → X → α} :
@@ -233,6 +341,12 @@ theorem equicontinuous_iff_range {F : ι → X → α} :
forall_congr' fun x₀ => equicontinuousAt_iff_range
#align equicontinuous_iff_range equicontinuous_iff_range
+/- warning: uniform_equicontinuous_at_iff_range -> uniformEquicontinuous_at_iff_range is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{max u3 u2, u2, u3} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) α β _inst_4 _inst_5 ((fun (a : Type.{max u3 u2}) (b : Sort.{max (succ u3) (succ u2)}) [self : HasLiftT.{succ (max u3 u2), max (succ u3) (succ u2)} a b] => self.0) (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (HasLiftT.mk.{succ (max u3 u2), max (succ u3) (succ u2)} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (CoeTCₓ.coe.{succ (max u3 u2), max (succ u3) (succ u2)} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (coeBase.{succ (max u3 u2), max (succ u3) (succ u2)} (coeSort.{succ (max u3 u2), succ (succ (max u3 u2))} (Set.{max u3 u2} (β -> α)) Type.{max u3 u2} (Set.hasCoeToSort.{max u3 u2} (β -> α)) (Set.range.{max u3 u2, succ u1} (β -> α) ι F)) (β -> α) (coeSubtype.{max (succ u3) (succ u2)} (β -> α) (fun (x : β -> α) => Membership.Mem.{max u3 u2, max u3 u2} (β -> α) (Set.{max u3 u2} (β -> α)) (Set.hasMem.{max u3 u2} (β -> α)) x (Set.range.{max u3 u2, succ u1} (β -> α) ι F))))))))
+but is expected to have type
+ forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{max u2 u1, u2, u1} (Subtype.{succ (max u2 u1)} (β -> α) (fun (x : β -> α) => Membership.mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.instMembershipSet.{max u2 u1} (β -> α)) x (Set.range.{max u2 u1, succ u3} (β -> α) ι F))) α β _inst_4 _inst_5 (Subtype.val.{succ (max u2 u1)} (β -> α) (fun (x : β -> α) => Membership.mem.{max u2 u1, max u2 u1} (β -> α) (Set.{max u2 u1} (β -> α)) (Set.instMembershipSet.{max u2 u1} (β -> α)) x (Set.range.{max u2 u1, succ u3} (β -> α) ι F))))
+Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous_at_iff_range uniformEquicontinuous_at_iff_rangeₓ'. -/
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff `range 𝓕` is uniformly equicontinuous,
i.e the family `coe : range F → β → α` is uniformly equicontinuous. -/
theorem uniformEquicontinuous_at_iff_range {F : ι → β → α} :
@@ -245,6 +359,12 @@ section
open UniformFun
+/- warning: equicontinuous_at_iff_continuous_at -> equicontinuousAt_iff_continuousAt is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α} {x₀ : X}, Iff (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) (ContinuousAt.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)) x₀)
+Case conversion may be inaccurate. Consider using '#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAtₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff the function `swap 𝓕 : X → ι → α` is
continuous at `x₀` *when `ι → α` is equipped with the topology of uniform convergence*. This is
very useful for developping the equicontinuity API, but it should not be used directly for other
@@ -254,6 +374,12 @@ theorem equicontinuousAt_iff_continuousAt {F : ι → X → α} {x₀ : X} :
rw [ContinuousAt, (UniformFun.hasBasis_nhds ι α _).tendsto_right_iff] <;> rfl
#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAt
+/- warning: equicontinuous_iff_continuous -> equicontinuous_iff_continuous is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u1 u3} X (UniformFun.{u1, u3} ι α) _inst_1 (UniformFun.topologicalSpace.{u1, u3} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u1) (succ u3)} X (ι -> α) (UniformFun.{u1, u3} ι α) (coeFn.{max 1 (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) => (ι -> α) -> (UniformFun.{u1, u3} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u1, u3} ι α)) (UniformFun.ofFun.{u1, u3} ι α)) (Function.swap.{succ u1, succ u2, succ u3} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {F : ι -> X -> α}, Iff (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) (Continuous.{u2, max u3 u1} X (UniformFun.{u3, u1} ι α) _inst_1 (UniformFun.topologicalSpace.{u3, u1} ι α _inst_4) (Function.comp.{succ u2, max (succ u1) (succ u3), max (succ u3) (succ u1)} X (ι -> α) (UniformFun.{u3, u1} ι α) (FunLike.coe.{max (succ u1) (succ u3), max (succ u1) (succ u3), max (succ u1) (succ u3)} (Equiv.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι -> α) => UniformFun.{u3, u1} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ι -> α) (UniformFun.{u3, u1} ι α)) (UniformFun.ofFun.{u3, u1} ι α)) (Function.swap.{succ u3, succ u2, succ u1} ι X (fun (ᾰ : ι) (ᾰ : X) => α) F)))
+Case conversion may be inaccurate. Consider using '#align equicontinuous_iff_continuous equicontinuous_iff_continuousₓ'. -/
/-- A family `𝓕 : ι → X → α` is equicontinuous iff the function `swap 𝓕 : X → ι → α` is
continuous *when `ι → α` is equipped with the topology of uniform convergence*. This is
very useful for developping the equicontinuity API, but it should not be used directly for other
@@ -263,6 +389,12 @@ theorem equicontinuous_iff_continuous {F : ι → X → α} :
simp_rw [Equicontinuous, continuous_iff_continuousAt, equicontinuousAt_iff_continuousAt]
#align equicontinuous_iff_continuous equicontinuous_iff_continuous
+/- warning: uniform_equicontinuous_iff_uniform_continuous -> uniformEquicontinuous_iff_uniformContinuous is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u3, max u1 u2} β (UniformFun.{u1, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u1, u2} ι α _inst_4) (Function.comp.{succ u3, max (succ u1) (succ u2), max (succ u1) (succ u2)} β (ι -> α) (UniformFun.{u1, u2} ι α) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) => (ι -> α) -> (UniformFun.{u1, u2} ι α)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ι -> α) (UniformFun.{u1, u2} ι α)) (UniformFun.ofFun.{u1, u2} ι α)) (Function.swap.{succ u1, succ u3, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
+but is expected to have type
+ forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {F : ι -> β -> α}, Iff (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) (UniformContinuous.{u1, max u3 u2} β (UniformFun.{u3, u2} ι α) _inst_5 (UniformFun.uniformSpace.{u3, u2} ι α _inst_4) (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u3) (succ u2)} β (ι -> α) (UniformFun.{u3, u2} ι α) (FunLike.coe.{max (succ u2) (succ u3), max (succ u2) (succ u3), max (succ u2) (succ u3)} (Equiv.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (ι -> α) (fun (_x : ι -> α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : ι -> α) => UniformFun.{u3, u2} ι α) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ι -> α) (UniformFun.{u3, u2} ι α)) (UniformFun.ofFun.{u3, u2} ι α)) (Function.swap.{succ u3, succ u1, succ u2} ι β (fun (ᾰ : ι) (ᾰ : β) => α) F)))
+Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuousₓ'. -/
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff the function `swap 𝓕 : β → ι → α` is
uniformly continuous *when `ι → α` is equipped with the uniform structure of uniform convergence*.
This is very useful for developping the equicontinuity API, but it should not be used directly
@@ -272,6 +404,12 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
rw [UniformContinuous, (UniformFun.hasBasis_uniformity ι α).tendsto_right_iff] <;> rfl
#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuous
+/- warning: filter.has_basis.equicontinuous_at_iff_left -> Filter.HasBasis.equicontinuousAt_iff_left is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u2} X)} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u2, succ u4} X κ (nhds.{u2} X _inst_1 x₀) p s) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u3} (Prod.{u3, u3} α α)), (Membership.Mem.{u3, u3} (Set.{u3} (Prod.{u3, u3} α α)) (Filter.{u3} (Prod.{u3, u3} α α)) (Filter.hasMem.{u3} (Prod.{u3, u3} α α)) U (uniformity.{u3} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x (s k)) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) U))))))
+but is expected to have type
+ forall {ι : Type.{u2}} {X : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u1} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} X)} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} X κ (nhds.{u3} X _inst_1 x₀) p s) -> (Iff (EquicontinuousAt.{u2, u3, u1} ι X α _inst_1 _inst_4 F x₀) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x₀) (F i x)) U))))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_leftₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ (k : _)(_ : p k), ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U :=
@@ -281,6 +419,12 @@ theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop
rfl
#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_left
+/- warning: filter.has_basis.equicontinuous_at_iff_right -> Filter.HasBasis.equicontinuousAt_iff_right is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} α α) κ (uniformity.{u3} α _inst_4) p s) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (k : κ), (p k) -> (Filter.Eventually.{u2} X (fun (x : X) => forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) (s k)) (nhds.{u2} X _inst_1 x₀))))
+but is expected to have type
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u3} α] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} α α) κ (uniformity.{u3} α _inst_4) p s) -> (Iff (EquicontinuousAt.{u2, u1, u3} ι X α _inst_1 _inst_4 F x₀) (forall (k : κ), (p k) -> (Filter.Eventually.{u1} X (fun (x : X) => forall (i : ι), Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) (s k)) (nhds.{u1} X _inst_1 x₀))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_rightₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Prop} {s : κ → Set (α × α)}
{F : ι → X → α} {x₀ : X} (hα : (𝓤 α).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ k, p k → ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ s k :=
@@ -290,6 +434,12 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Pro
rfl
#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_right
+/- warning: filter.has_basis.equicontinuous_at_iff -> Filter.HasBasis.equicontinuousAt_iff is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {κ₁ : Type.{u4}} {κ₂ : Type.{u5}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u2} X)} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u2, succ u4} X κ₁ (nhds.{u2} X _inst_1 x₀) p₁ s₁) -> (Filter.HasBasis.{u3, succ u5} (Prod.{u3, u3} α α) κ₂ (uniformity.{u3} α _inst_4) p₂ s₂) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u4} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : X), (Membership.Mem.{u2, u2} X (Set.{u2} X) (Set.hasMem.{u2} X) x (s₁ k₁)) -> (forall (i : ι), Membership.Mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.hasMem.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i x₀) (F i x)) (s₂ k₂)))))))
+but is expected to have type
+ forall {ι : Type.{u1}} {X : Type.{u3}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u3} X] [_inst_4 : UniformSpace.{u2} α] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} X)} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> X -> α} {x₀ : X}, (Filter.HasBasis.{u3, succ u5} X κ₁ (nhds.{u3} X _inst_1 x₀) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (EquicontinuousAt.{u1, u3, u2} ι X α _inst_1 _inst_4 F x₀) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : X), (Membership.mem.{u3, u3} X (Set.{u3} X) (Set.instMembershipSet.{u3} X) x (s₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x₀) (F i x)) (s₂ k₂)))))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iffₓ'. -/
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -301,6 +451,12 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ
rfl
#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iff
+/- warning: filter.has_basis.uniform_equicontinuous_iff_left -> Filter.HasBasis.uniformEquicontinuous_iff_left is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} β β))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ (uniformity.{u3} β _inst_5) p s) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (U : Set.{u2} (Prod.{u2, u2} α α)), (Membership.Mem.{u2, u2} (Set.{u2} (Prod.{u2, u2} α α)) (Filter.{u2} (Prod.{u2, u2} α α)) (Filter.hasMem.{u2} (Prod.{u2, u2} α α)) U (uniformity.{u2} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => forall (x : β) (y : β), (Membership.Mem.{u3, u3} (Prod.{u3, u3} β β) (Set.{u3} (Prod.{u3, u3} β β)) (Set.hasMem.{u3} (Prod.{u3, u3} β β)) (Prod.mk.{u3, u3} β β x y) (s k)) -> (forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) U))))))
+but is expected to have type
+ forall {ι : Type.{u2}} {α : Type.{u1}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} β β))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ (uniformity.{u3} β _inst_5) p s) -> (Iff (UniformEquicontinuous.{u2, u1, u3} ι α β _inst_4 _inst_5 F) (forall (U : Set.{u1} (Prod.{u1, u1} α α)), (Membership.mem.{u1, u1} (Set.{u1} (Prod.{u1, u1} α α)) (Filter.{u1} (Prod.{u1, u1} α α)) (instMembershipSetFilter.{u1} (Prod.{u1, u1} α α)) U (uniformity.{u1} α _inst_4)) -> (Exists.{succ u4} κ (fun (k : κ) => Exists.{0} (p k) (fun (_x : p k) => 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 k)) -> (forall (i : ι), Membership.mem.{u1, u1} (Prod.{u1, u1} α α) (Set.{u1} (Prod.{u1, u1} α α)) (Set.instMembershipSet.{u1} (Prod.{u1, u1} α α)) (Prod.mk.{u1, u1} α α (F i x) (F i y)) U))))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_leftₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
@@ -312,6 +468,12 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ →
rfl
#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_left
+/- warning: filter.has_basis.uniform_equicontinuous_iff_right -> Filter.HasBasis.uniformEquicontinuous_iff_right is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ (uniformity.{u2} α _inst_4) p s) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k : κ), (p k) -> (Filter.Eventually.{u3} (Prod.{u3, u3} β β) (fun (xy : Prod.{u3, u3} β β) => forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i (Prod.fst.{u3, u3} β β xy)) (F i (Prod.snd.{u3, u3} β β xy))) (s k)) (uniformity.{u3} β _inst_5))))
+but is expected to have type
+ forall {ι : Type.{u2}} {α : Type.{u3}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u1} β] {κ : Type.{u4}} {p : κ -> Prop} {s : κ -> (Set.{u3} (Prod.{u3, u3} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} α α) κ (uniformity.{u3} α _inst_4) p s) -> (Iff (UniformEquicontinuous.{u2, u3, u1} ι α β _inst_4 _inst_5 F) (forall (k : κ), (p k) -> (Filter.Eventually.{u1} (Prod.{u1, u1} β β) (fun (xy : Prod.{u1, u1} β β) => forall (i : ι), Membership.mem.{u3, u3} (Prod.{u3, u3} α α) (Set.{u3} (Prod.{u3, u3} α α)) (Set.instMembershipSet.{u3} (Prod.{u3, u3} α α)) (Prod.mk.{u3, u3} α α (F i (Prod.fst.{u1, u1} β β xy)) (F i (Prod.snd.{u1, u1} β β xy))) (s k)) (uniformity.{u1} β _inst_5))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_rightₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ → Prop}
{s : κ → Set (α × α)} {F : ι → β → α} (hα : (𝓤 α).HasBasis p s) :
UniformEquicontinuous F ↔ ∀ k, p k → ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ s k :=
@@ -321,6 +483,12 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ
rfl
#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_right
+/- warning: filter.has_basis.uniform_equicontinuous_iff -> Filter.HasBasis.uniformEquicontinuous_iff is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ₁ : Type.{u4}} {κ₂ : Type.{u5}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} (Prod.{u3, u3} β β))} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u4} (Prod.{u3, u3} β β) κ₁ (uniformity.{u3} β _inst_5) p₁ s₁) -> (Filter.HasBasis.{u2, succ u5} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u4} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => forall (x : β) (y : β), (Membership.Mem.{u3, u3} (Prod.{u3, u3} β β) (Set.{u3} (Prod.{u3, u3} β β)) (Set.hasMem.{u3} (Prod.{u3, u3} β β)) (Prod.mk.{u3, u3} β β x y) (s₁ k₁)) -> (forall (i : ι), Membership.Mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.hasMem.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) (s₂ k₂)))))))
+but is expected to have type
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {κ₁ : Type.{u5}} {κ₂ : Type.{u4}} {p₁ : κ₁ -> Prop} {s₁ : κ₁ -> (Set.{u3} (Prod.{u3, u3} β β))} {p₂ : κ₂ -> Prop} {s₂ : κ₂ -> (Set.{u2} (Prod.{u2, u2} α α))} {F : ι -> β -> α}, (Filter.HasBasis.{u3, succ u5} (Prod.{u3, u3} β β) κ₁ (uniformity.{u3} β _inst_5) p₁ s₁) -> (Filter.HasBasis.{u2, succ u4} (Prod.{u2, u2} α α) κ₂ (uniformity.{u2} α _inst_4) p₂ s₂) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (forall (k₂ : κ₂), (p₂ k₂) -> (Exists.{succ u5} κ₁ (fun (k₁ : κ₁) => Exists.{0} (p₁ k₁) (fun (_x : p₁ k₁) => 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₁ k₁)) -> (forall (i : ι), Membership.mem.{u2, u2} (Prod.{u2, u2} α α) (Set.{u2} (Prod.{u2, u2} α α)) (Set.instMembershipSet.{u2} (Prod.{u2, u2} α α)) (Prod.mk.{u2, u2} α α (F i x) (F i y)) (s₂ k₂)))))))
+Case conversion may be inaccurate. Consider using '#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iffₓ'. -/
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -333,6 +501,12 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
rfl
#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iff
+/- warning: uniform_inducing.equicontinuous_at_iff -> UniformInducing.equicontinuousAt_iff is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F) x₀))
+but is expected to have type
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {x₀ : X} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (EquicontinuousAt.{u2, u1, u4} ι X α _inst_1 _inst_4 F x₀) (EquicontinuousAt.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3096 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3098 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3096 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3098) u) F) x₀))
+Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iffₓ'. -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
equicontinuous at `x₀`. -/
@@ -344,6 +518,12 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
rfl
#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iff
+/- warning: uniform_inducing.equicontinuous_iff -> UniformInducing.equicontinuous_iff is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} {β : Type.{u4}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] [_inst_5 : UniformSpace.{u4} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u3, u4} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u1, u2, u4} ι X β _inst_1 _inst_5 (Function.comp.{succ u1, max (succ u2) (succ u3), max (succ u2) (succ u4)} ι (X -> α) (X -> β) (Function.comp.{succ u2, succ u3, succ u4} X α β u) F)))
+but is expected to have type
+ forall {ι : Type.{u2}} {X : Type.{u1}} {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u3} β] {F : ι -> X -> α} {u : α -> β}, (UniformInducing.{u4, u3} α β _inst_4 _inst_5 u) -> (Iff (Equicontinuous.{u2, u1, u4} ι X α _inst_1 _inst_4 F) (Equicontinuous.{u2, u1, u3} ι X β _inst_1 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u3) (succ u1)} ι (X -> α) (X -> β) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3235 : α -> β) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3237 : X -> α) => Function.comp.{succ u1, succ u4, succ u3} X α β x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3235 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3237) u) F)))
+Case conversion may be inaccurate. Consider using '#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iffₓ'. -/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr ∀ x, (_ : exprProp())]] -/
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is equicontinuous. -/
@@ -355,6 +535,12 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
rw [hu.equicontinuous_at_iff]
#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iff
+/- warning: uniform_inducing.uniform_equicontinuous_iff -> UniformInducing.uniformEquicontinuous_iff is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} {γ : Type.{u4}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] [_inst_6 : UniformSpace.{u4} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u2, u4} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u1, u4, u3} ι γ β _inst_6 _inst_5 (Function.comp.{succ u1, max (succ u3) (succ u2), max (succ u3) (succ u4)} ι (β -> α) (β -> γ) (Function.comp.{succ u3, succ u2, succ u4} β α γ u) F)))
+but is expected to have type
+ forall {ι : Type.{u2}} {α : Type.{u4}} {β : Type.{u1}} {γ : Type.{u3}} [_inst_4 : UniformSpace.{u4} α] [_inst_5 : UniformSpace.{u1} β] [_inst_6 : UniformSpace.{u3} γ] {F : ι -> β -> α} {u : α -> γ}, (UniformInducing.{u4, u3} α γ _inst_4 _inst_6 u) -> (Iff (UniformEquicontinuous.{u2, u4, u1} ι α β _inst_4 _inst_5 F) (UniformEquicontinuous.{u2, u3, u1} ι γ β _inst_6 _inst_5 (Function.comp.{succ u2, max (succ u4) (succ u1), max (succ u1) (succ u3)} ι (β -> α) (β -> γ) ((fun (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3422 : α -> γ) (x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3424 : β -> α) => Function.comp.{succ u1, succ u4, succ u3} β α γ x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3422 x._@.Mathlib.Topology.UniformSpace.Equicontinuity._hyg.3424) u) F)))
+Case conversion may be inaccurate. Consider using '#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iffₓ'. -/
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
equicontinuous. -/
@@ -367,6 +553,12 @@ theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α
rfl
#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iff
+/- warning: equicontinuous_at.closure' -> EquicontinuousAt.closure' is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_4 : UniformSpace.{u3} α] {A : Set.{u2} Y} {u : Y -> X -> α} {x₀ : X}, (EquicontinuousAt.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x A))))))) x₀) -> (Continuous.{u2, max u1 u3} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u1, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) u) -> (EquicontinuousAt.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x (closure.{u2} Y _inst_2 A)))))))) x₀)
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} Y] [_inst_4 : UniformSpace.{u1} α] {A : Set.{u3} Y} {u : Y -> X -> α} {x₀ : X}, (EquicontinuousAt.{u3, u2, u1} (Set.Elem.{u3} Y A) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y A) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x A))) x₀) -> (Continuous.{u3, max u2 u1} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) u) -> (EquicontinuousAt.{u3, u2, u1} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x (closure.{u3} Y _inst_2 A)))) x₀)
+Case conversion may be inaccurate. Consider using '#align equicontinuous_at.closure' EquicontinuousAt.closure'ₓ'. -/
/-- A version of `equicontinuous_at.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
@@ -384,6 +576,12 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
exact Continuous.prod_mk ((continuous_apply x₀).comp hu) ((continuous_apply x).comp hu)
#align equicontinuous_at.closure' EquicontinuousAt.closure'
+/- warning: equicontinuous_at.closure -> EquicontinuousAt.closure is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {A : Set.{max u1 u2} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 A x₀) -> (Set.EquicontinuousAt.{u1, u2} X α _inst_1 _inst_4 (closure.{max u1 u2} (X -> α) (Pi.topologicalSpace.{u1, u2} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) A) x₀)
+but is expected to have type
+ forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {A : Set.{max u2 u1} (X -> α)} {x₀ : X}, (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 A x₀) -> (Set.EquicontinuousAt.{u2, u1} X α _inst_1 _inst_4 (closure.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) A) x₀)
+Case conversion may be inaccurate. Consider using '#align equicontinuous_at.closure EquicontinuousAt.closureₓ'. -/
/-- If a set of functions is equicontinuous at some `x₀`, its closure for the product topology is
also equicontinuous at `x₀`. -/
theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
@@ -391,6 +589,12 @@ theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.Equico
@EquicontinuousAt.closure' _ _ _ _ _ _ _ id _ hA continuous_id
#align equicontinuous_at.closure EquicontinuousAt.closure
+/- warning: filter.tendsto.continuous_at_of_equicontinuous_at -> Filter.Tendsto.continuousAt_of_equicontinuousAt is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {l : Filter.{u1} ι} [_inst_7 : Filter.NeBot.{u1} ι l] {F : ι -> X -> α} {f : X -> α} {x₀ : X}, (Filter.Tendsto.{u1, max u2 u3} ι (X -> α) F l (nhds.{max u2 u3} (X -> α) (Pi.topologicalSpace.{u2, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) f)) -> (EquicontinuousAt.{u1, u2, u3} ι X α _inst_1 _inst_4 F x₀) -> (ContinuousAt.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) f x₀)
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {l : Filter.{u3} ι} [_inst_7 : Filter.NeBot.{u3} ι l] {F : ι -> X -> α} {f : X -> α} {x₀ : X}, (Filter.Tendsto.{u3, max u2 u1} ι (X -> α) F l (nhds.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) f)) -> (EquicontinuousAt.{u3, u2, u1} ι X α _inst_1 _inst_4 F x₀) -> (ContinuousAt.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f x₀)
+Case conversion may be inaccurate. Consider using '#align filter.tendsto.continuous_at_of_equicontinuous_at Filter.Tendsto.continuousAt_of_equicontinuousAtₓ'. -/
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous at some `x₀ : X`, then the limit is continuous at `x₀`. -/
theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.ne_bot] {F : ι → X → α}
@@ -400,6 +604,12 @@ theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.ne_bo
⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
#align filter.tendsto.continuous_at_of_equicontinuous_at Filter.Tendsto.continuousAt_of_equicontinuousAt
+/- warning: equicontinuous.closure' -> Equicontinuous.closure' is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_4 : UniformSpace.{u3} α] {A : Set.{u2} Y} {u : Y -> X -> α}, (Equicontinuous.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) A) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x A)))))))) -> (Continuous.{u2, max u1 u3} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u1, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) u) -> (Equicontinuous.{u2, u1, u3} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u2, succ u2, max (succ u1) (succ u3)} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (X -> α) u ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Set.{u2} Y) Type.{u2} (Set.hasCoeToSort.{u2} Y) (closure.{u2} Y _inst_2 A)) Y (coeSubtype.{succ u2} Y (fun (x : Y) => Membership.Mem.{u2, u2} Y (Set.{u2} Y) (Set.hasMem.{u2} Y) x (closure.{u2} Y _inst_2 A)))))))))
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u3}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_2 : TopologicalSpace.{u3} Y] [_inst_4 : UniformSpace.{u1} α] {A : Set.{u3} Y} {u : Y -> X -> α}, (Equicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y A) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y A) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x A)))) -> (Continuous.{u3, max u2 u1} Y (X -> α) _inst_2 (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) u) -> (Equicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) X α _inst_1 _inst_4 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) Y (X -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x (closure.{u3} Y _inst_2 A)))))
+Case conversion may be inaccurate. Consider using '#align equicontinuous.closure' Equicontinuous.closure'ₓ'. -/
/-- A version of `equicontinuous.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
@@ -409,12 +619,24 @@ theorem Equicontinuous.closure' {A : Set Y} {u : Y → X → α}
Equicontinuous (u ∘ coe : closure A → X → α) := fun x => (hA x).closure' hu
#align equicontinuous.closure' Equicontinuous.closure'
+/- warning: equicontinuous.closure -> Equicontinuous.closure is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {α : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_4 : UniformSpace.{u2} α] {A : Set.{max u1 u2} (X -> α)}, (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 A) -> (Set.Equicontinuous.{u1, u2} X α _inst_1 _inst_4 (closure.{max u1 u2} (X -> α) (Pi.topologicalSpace.{u1, u2} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) A))
+but is expected to have type
+ forall {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {A : Set.{max u2 u1} (X -> α)}, (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 A) -> (Set.Equicontinuous.{u2, u1} X α _inst_1 _inst_4 (closure.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) A))
+Case conversion may be inaccurate. Consider using '#align equicontinuous.closure Equicontinuous.closureₓ'. -/
/-- If a set of functions is equicontinuous, its closure for the product topology is also
equicontinuous. -/
theorem Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
(closure A).Equicontinuous := fun x => (hA x).closure
#align equicontinuous.closure Equicontinuous.closure
+/- warning: filter.tendsto.continuous_of_equicontinuous_at -> Filter.Tendsto.continuous_of_equicontinuous_at is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {X : Type.{u2}} {α : Type.{u3}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u3} α] {l : Filter.{u1} ι} [_inst_7 : Filter.NeBot.{u1} ι l] {F : ι -> X -> α} {f : X -> α}, (Filter.Tendsto.{u1, max u2 u3} ι (X -> α) F l (nhds.{max u2 u3} (X -> α) (Pi.topologicalSpace.{u2, u3} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u3} α _inst_4)) f)) -> (Equicontinuous.{u1, u2, u3} ι X α _inst_1 _inst_4 F) -> (Continuous.{u2, u3} X α _inst_1 (UniformSpace.toTopologicalSpace.{u3} α _inst_4) f)
+but is expected to have type
+ forall {ι : Type.{u3}} {X : Type.{u2}} {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} X] [_inst_4 : UniformSpace.{u1} α] {l : Filter.{u3} ι} [_inst_7 : Filter.NeBot.{u3} ι l] {F : ι -> X -> α} {f : X -> α}, (Filter.Tendsto.{u3, max u2 u1} ι (X -> α) F l (nhds.{max u2 u1} (X -> α) (Pi.topologicalSpace.{u2, u1} X (fun (ᾰ : X) => α) (fun (a : X) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) f)) -> (Equicontinuous.{u3, u2, u1} ι X α _inst_1 _inst_4 F) -> (Continuous.{u2, u1} X α _inst_1 (UniformSpace.toTopologicalSpace.{u1} α _inst_4) f)
+Case conversion may be inaccurate. Consider using '#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous_atₓ'. -/
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous, then the limit is continuous. -/
theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.ne_bot] {F : ι → X → α}
@@ -422,6 +644,12 @@ theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.ne_bot
continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous_at
+/- warning: uniform_equicontinuous.closure' -> UniformEquicontinuous.closure' is a dubious translation:
+lean 3 declaration is
+ forall {Y : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_2 : TopologicalSpace.{u1} Y] [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {A : Set.{u1} Y} {u : Y -> β -> α}, (UniformEquicontinuous.{u1, u2, u3} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) α β _inst_4 _inst_5 (Function.comp.{succ u1, succ u1, max (succ u3) (succ u2)} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (β -> α) u ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) A) Y (coeSubtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x A)))))))) -> (Continuous.{u1, max u3 u2} Y (β -> α) _inst_2 (Pi.topologicalSpace.{u3, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) u) -> (UniformEquicontinuous.{u1, u2, u3} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) α β _inst_4 _inst_5 (Function.comp.{succ u1, succ u1, max (succ u3) (succ u2)} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (β -> α) u ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Set.{u1} Y) Type.{u1} (Set.hasCoeToSort.{u1} Y) (closure.{u1} Y _inst_2 A)) Y (coeSubtype.{succ u1} Y (fun (x : Y) => Membership.Mem.{u1, u1} Y (Set.{u1} Y) (Set.hasMem.{u1} Y) x (closure.{u1} Y _inst_2 A)))))))))
+but is expected to have type
+ forall {Y : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_2 : TopologicalSpace.{u3} Y] [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {A : Set.{u3} Y} {u : Y -> β -> α}, (UniformEquicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y A) α β _inst_4 _inst_5 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y A) Y (β -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x A)))) -> (Continuous.{u3, max u2 u1} Y (β -> α) _inst_2 (Pi.topologicalSpace.{u1, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) u) -> (UniformEquicontinuous.{u3, u2, u1} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) α β _inst_4 _inst_5 (Function.comp.{succ u3, succ u3, max (succ u2) (succ u1)} (Set.Elem.{u3} Y (closure.{u3} Y _inst_2 A)) Y (β -> α) u (Subtype.val.{succ u3} Y (fun (x : Y) => Membership.mem.{u3, u3} Y (Set.{u3} Y) (Set.instMembershipSet.{u3} Y) x (closure.{u3} Y _inst_2 A)))))
+Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'ₓ'. -/
/-- A version of `uniform_equicontinuous.closure` applicable to subsets of types which embed
continuously into `β → α` with the product topology. It turns out we don't need any other condition
on the embedding than continuity, but in practice this will mostly be applied to `fun_like` types
@@ -440,6 +668,12 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
exact Continuous.prod_mk ((continuous_apply x).comp hu) ((continuous_apply y).comp hu)
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
+/- warning: uniform_equicontinuous.closure -> UniformEquicontinuous.closure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_4 : UniformSpace.{u1} α] [_inst_5 : UniformSpace.{u2} β] {A : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 A) -> (Set.UniformEquicontinuous.{u1, u2} α β _inst_4 _inst_5 (closure.{max u2 u1} (β -> α) (Pi.topologicalSpace.{u2, u1} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u1} α _inst_4)) A))
+but is expected to have type
+ forall {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {A : Set.{max u2 u1} (β -> α)}, (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 A) -> (Set.UniformEquicontinuous.{u2, u1} α β _inst_4 _inst_5 (closure.{max u2 u1} (β -> α) (Pi.topologicalSpace.{u1, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) A))
+Case conversion may be inaccurate. Consider using '#align uniform_equicontinuous.closure UniformEquicontinuous.closureₓ'. -/
/-- If a set of functions is uniformly equicontinuous, its closure for the product topology is also
uniformly equicontinuous. -/
theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEquicontinuous) :
@@ -447,6 +681,12 @@ theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEqui
@UniformEquicontinuous.closure' _ _ _ _ _ _ _ id hA continuous_id
#align uniform_equicontinuous.closure UniformEquicontinuous.closure
+/- warning: filter.tendsto.uniform_continuous_of_uniform_equicontinuous -> Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u3} β] {l : Filter.{u1} ι} [_inst_7 : Filter.NeBot.{u1} ι l] {F : ι -> β -> α} {f : β -> α}, (Filter.Tendsto.{u1, max u3 u2} ι (β -> α) F l (nhds.{max u3 u2} (β -> α) (Pi.topologicalSpace.{u3, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) f)) -> (UniformEquicontinuous.{u1, u2, u3} ι α β _inst_4 _inst_5 F) -> (UniformContinuous.{u3, u2} β α _inst_5 _inst_4 f)
+but is expected to have type
+ forall {ι : Type.{u3}} {α : Type.{u2}} {β : Type.{u1}} [_inst_4 : UniformSpace.{u2} α] [_inst_5 : UniformSpace.{u1} β] {l : Filter.{u3} ι} [_inst_7 : Filter.NeBot.{u3} ι l] {F : ι -> β -> α} {f : β -> α}, (Filter.Tendsto.{u3, max u2 u1} ι (β -> α) F l (nhds.{max u2 u1} (β -> α) (Pi.topologicalSpace.{u1, u2} β (fun (ᾰ : β) => α) (fun (a : β) => UniformSpace.toTopologicalSpace.{u2} α _inst_4)) f)) -> (UniformEquicontinuous.{u3, u2, u1} ι α β _inst_4 _inst_5 F) -> (UniformContinuous.{u1, u2} β α _inst_5 _inst_4 f)
+Case conversion may be inaccurate. Consider using '#align filter.tendsto.uniform_continuous_of_uniform_equicontinuous Filter.Tendsto.uniformContinuous_of_uniformEquicontinuousₓ'. -/
/-- If `𝓕 : ι → β → α` tends to `f : β → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is uniformly equicontinuous, then the limit is uniformly continuous. -/
theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι} [l.ne_bot]
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -909,7 +909,7 @@ protected theorem Set.UniformEquicontinuous.closure {A : Set <| β → α}
/-- If a set of functions is uniformly equicontinuous on a set `S`, its closure for the product
topology is also uniformly equicontinuous. This would also be true for the coarser topology of
-pointwise convergence on `S`, see `UniformEquicontinuousOn.closure'`.-/
+pointwise convergence on `S`, see `UniformEquicontinuousOn.closure'`. -/
protected theorem Set.UniformEquicontinuousOn.closure {A : Set <| β → α} {S : Set β}
(hA : A.UniformEquicontinuousOn S) : (closure A).UniformEquicontinuousOn S :=
UniformEquicontinuousOn.closure' (u := id) hA (Pi.continuous_restrict _)
@@ -88,7 +88,7 @@ variable {ι κ X X' Y Z α α' β β' γ 𝓕 : Type*} [tX : TopologicalSpace X
[tZ : TopologicalSpace Z] [uα : UniformSpace α] [uβ : UniformSpace β] [uγ : UniformSpace γ]
/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
-*equicontinuous at `x₀ : X`* if, for all entourage `U ∈ 𝓤 α`, there is a neighborhood `V` of `x₀`
+*equicontinuous at `x₀ : X`* if, for all entourages `U ∈ 𝓤 α`, there is a neighborhood `V` of `x₀`
such that, for all `x ∈ V` and for all `i : ι`, `F i x` is `U`-close to `F i x₀`. -/
def EquicontinuousAt (F : ι → X → α) (x₀ : X) : Prop :=
∀ U ∈ 𝓤 α, ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ U
@@ -101,7 +101,7 @@ protected abbrev Set.EquicontinuousAt (H : Set <| X → α) (x₀ : X) : Prop :=
#align set.equicontinuous_at Set.EquicontinuousAt
/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
-*equicontinuous at `x₀ : X` within `S : Set X`* if, for all entourage `U ∈ 𝓤 α`, there is a
+*equicontinuous at `x₀ : X` within `S : Set X`* if, for all entourages `U ∈ 𝓤 α`, there is a
neighborhood `V` of `x₀` within `S` such that, for all `x ∈ V` and for all `i : ι`, `F i x` is
`U`-close to `F i x₀`. -/
def EquicontinuousWithinAt (F : ι → X → α) (S : Set X) (x₀ : X) : Prop :=
@@ -135,7 +135,7 @@ protected abbrev Set.EquicontinuousOn (H : Set <| X → α) (S : Set X) : Prop :
EquicontinuousOn ((↑) : H → X → α) S
/-- A family `F : ι → β → α` of functions between uniform spaces is *uniformly equicontinuous* if,
-for all entourage `U ∈ 𝓤 α`, there is an entourage `V ∈ 𝓤 β` such that, whenever `x` and `y` are
+for all entourages `U ∈ 𝓤 α`, there is an entourage `V ∈ 𝓤 β` such that, whenever `x` and `y` are
`V`-close, we have that, *for all `i : ι`*, `F i x` is `U`-close to `F i y`. -/
def UniformEquicontinuous (F : ι → β → α) : Prop :=
∀ U ∈ 𝓤 α, ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ U
@@ -148,7 +148,7 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
#align set.uniform_equicontinuous Set.UniformEquicontinuous
/-- A family `F : ι → β → α` of functions between uniform spaces is
-*uniformly equicontinuous on `S : Set β`* if, for all entourage `U ∈ 𝓤 α`, there is a relative
+*uniformly equicontinuous on `S : Set β`* if, for all entourages `U ∈ 𝓤 α`, there is a relative
entourage `V ∈ 𝓤 β ⊓ 𝓟 (S ×ˢ S)` such that, whenever `x` and `y` are `V`-close, we have that,
*for all `i : ι`*, `F i x` is `U`-close to `F i y`. -/
def UniformEquicontinuousOn (F : ι → β → α) (S : Set β) : Prop :=
@@ -33,12 +33,16 @@ For maps between metric spaces, this corresponds to
* `Equicontinuous`: equicontinuity of a family of functions on the whole domain
* `UniformEquicontinuous`: uniform equicontinuity of a family of functions on the whole domain
+We also introduce relative versions, namely `EquicontinuousWithinAt`, `EquicontinuousOn` and
+`UniformEquicontinuousOn`, akin to `ContinuousWithinAt`, `ContinuousOn` and `UniformContinuousOn`
+respectively.
+
## Main statements
* `equicontinuous_iff_continuous`: equicontinuity can be expressed as a simple continuity
condition between well-chosen function spaces. This is really useful for building up the theory.
* `Equicontinuous.closure`: if a set of functions is equicontinuous, its closure
- *for the topology of uniform convergence* is also equicontinuous.
+ *for the topology of pointwise convergence* is also equicontinuous.
## Notations
@@ -66,11 +70,6 @@ and `Set.UniformEquicontinuous` asserting the corresponding fact about the famil
`(↑) : ↥H → (X → α)` where `H : Set (X → α)`. Note however that these won't work for sets of hom
types, and in that case one should go back to the family definition rather than using `Set.image`.
-Since we have no use case for it yet, we don't introduce any relative version
-(i.e no `EquicontinuousWithinAt` or `EquicontinuousOn`), but this is more of a conservative
-position than a design decision, so anyone needing relative versions should feel free to add them,
-and that should hopefully be a straightforward task.
-
## References
* [N. Bourbaki, *General Topology, Chapter X*][bourbaki1966]
@@ -83,10 +82,10 @@ equicontinuity, uniform convergence, ascoli
section
-open UniformSpace Filter Set Uniformity Topology UniformConvergence
+open UniformSpace Filter Set Uniformity Topology UniformConvergence Function
-variable {ι κ X Y Z α β γ 𝓕 : Type*} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
- [UniformSpace α] [UniformSpace β] [UniformSpace γ]
+variable {ι κ X X' Y Z α α' β β' γ 𝓕 : Type*} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
+ [tZ : TopologicalSpace Z] [uα : UniformSpace α] [uβ : UniformSpace β] [uγ : UniformSpace γ]
/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
*equicontinuous at `x₀ : X`* if, for all entourage `U ∈ 𝓤 α`, there is a neighborhood `V` of `x₀`
@@ -101,6 +100,18 @@ protected abbrev Set.EquicontinuousAt (H : Set <| X → α) (x₀ : X) : Prop :=
EquicontinuousAt ((↑) : H → X → α) x₀
#align set.equicontinuous_at Set.EquicontinuousAt
+/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
+*equicontinuous at `x₀ : X` within `S : Set X`* if, for all entourage `U ∈ 𝓤 α`, there is a
+neighborhood `V` of `x₀` within `S` such that, for all `x ∈ V` and for all `i : ι`, `F i x` is
+`U`-close to `F i x₀`. -/
+def EquicontinuousWithinAt (F : ι → X → α) (S : Set X) (x₀ : X) : Prop :=
+ ∀ U ∈ 𝓤 α, ∀ᶠ x in 𝓝[S] x₀, ∀ i, (F i x₀, F i x) ∈ U
+
+/-- We say that a set `H : Set (X → α)` of functions is equicontinuous at a point within a subset
+if the family `(↑) : ↥H → (X → α)` is equicontinuous at that point within that same subset. -/
+protected abbrev Set.EquicontinuousWithinAt (H : Set <| X → α) (S : Set X) (x₀ : X) : Prop :=
+ EquicontinuousWithinAt ((↑) : H → X → α) S x₀
+
/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
*equicontinuous* on all of `X` if it is equicontinuous at each point of `X`. -/
def Equicontinuous (F : ι → X → α) : Prop :=
@@ -113,9 +124,19 @@ protected abbrev Set.Equicontinuous (H : Set <| X → α) : Prop :=
Equicontinuous ((↑) : H → X → α)
#align set.equicontinuous Set.Equicontinuous
+/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
+*equicontinuous on `S : Set X`* if it is equicontinuous *within `S`* at each point of `S`. -/
+def EquicontinuousOn (F : ι → X → α) (S : Set X) : Prop :=
+ ∀ x₀ ∈ S, EquicontinuousWithinAt F S x₀
+
+/-- We say that a set `H : Set (X → α)` of functions is equicontinuous on a subset if the family
+`(↑) : ↥H → (X → α)` is equicontinuous on that subset. -/
+protected abbrev Set.EquicontinuousOn (H : Set <| X → α) (S : Set X) : Prop :=
+ EquicontinuousOn ((↑) : H → X → α) S
+
/-- A family `F : ι → β → α` of functions between uniform spaces is *uniformly equicontinuous* if,
for all entourage `U ∈ 𝓤 α`, there is an entourage `V ∈ 𝓤 β` such that, whenever `x` and `y` are
-`V`-close, we have that, *for all `i : ι`*, `F i x` is `U`-close to `F i x₀`. -/
+`V`-close, we have that, *for all `i : ι`*, `F i x` is `U`-close to `F i y`. -/
def UniformEquicontinuous (F : ι → β → α) : Prop :=
∀ U ∈ 𝓤 α, ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ U
#align uniform_equicontinuous UniformEquicontinuous
@@ -126,6 +147,68 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
UniformEquicontinuous ((↑) : H → β → α)
#align set.uniform_equicontinuous Set.UniformEquicontinuous
+/-- A family `F : ι → β → α` of functions between uniform spaces is
+*uniformly equicontinuous on `S : Set β`* if, for all entourage `U ∈ 𝓤 α`, there is a relative
+entourage `V ∈ 𝓤 β ⊓ 𝓟 (S ×ˢ S)` such that, whenever `x` and `y` are `V`-close, we have that,
+*for all `i : ι`*, `F i x` is `U`-close to `F i y`. -/
+def UniformEquicontinuousOn (F : ι → β → α) (S : Set β) : Prop :=
+ ∀ U ∈ 𝓤 α, ∀ᶠ xy : β × β in 𝓤 β ⊓ 𝓟 (S ×ˢ S), ∀ i, (F i xy.1, F i xy.2) ∈ U
+
+/-- We say that a set `H : Set (X → α)` of functions is uniformly equicontinuous on a subset if the
+family `(↑) : ↥H → (X → α)` is uniformly equicontinuous on that subset. -/
+protected abbrev Set.UniformEquicontinuousOn (H : Set <| β → α) (S : Set β) : Prop :=
+ UniformEquicontinuousOn ((↑) : H → β → α) S
+
+lemma EquicontinuousAt.equicontinuousWithinAt {F : ι → X → α} {x₀ : X} (H : EquicontinuousAt F x₀)
+ (S : Set X) : EquicontinuousWithinAt F S x₀ :=
+ fun U hU ↦ (H U hU).filter_mono inf_le_left
+
+lemma EquicontinuousWithinAt.mono {F : ι → X → α} {x₀ : X} {S T : Set X}
+ (H : EquicontinuousWithinAt F T x₀) (hST : S ⊆ T) : EquicontinuousWithinAt F S x₀ :=
+ fun U hU ↦ (H U hU).filter_mono <| nhdsWithin_mono x₀ hST
+
+@[simp] lemma equicontinuousWithinAt_univ (F : ι → X → α) (x₀ : X) :
+ EquicontinuousWithinAt F univ x₀ ↔ EquicontinuousAt F x₀ := by
+ rw [EquicontinuousWithinAt, EquicontinuousAt, nhdsWithin_univ]
+
+lemma equicontinuousAt_restrict_iff (F : ι → X → α) {S : Set X} (x₀ : S) :
+ EquicontinuousAt (S.restrict ∘ F) x₀ ↔ EquicontinuousWithinAt F S x₀ := by
+ simp [EquicontinuousWithinAt, EquicontinuousAt,
+ ← eventually_nhds_subtype_iff]
+
+lemma Equicontinuous.equicontinuousOn {F : ι → X → α} (H : Equicontinuous F)
+ (S : Set X) : EquicontinuousOn F S :=
+ fun x _ ↦ (H x).equicontinuousWithinAt S
+
+lemma EquicontinuousOn.mono {F : ι → X → α} {S T : Set X}
+ (H : EquicontinuousOn F T) (hST : S ⊆ T) : EquicontinuousOn F S :=
+ fun x hx ↦ (H x (hST hx)).mono hST
+
+lemma equicontinuousOn_univ (F : ι → X → α) :
+ EquicontinuousOn F univ ↔ Equicontinuous F := by
+ simp [EquicontinuousOn, Equicontinuous]
+
+lemma equicontinuous_restrict_iff (F : ι → X → α) {S : Set X} :
+ Equicontinuous (S.restrict ∘ F) ↔ EquicontinuousOn F S := by
+ simp [Equicontinuous, EquicontinuousOn, equicontinuousAt_restrict_iff]
+
+lemma UniformEquicontinuous.uniformEquicontinuousOn {F : ι → β → α} (H : UniformEquicontinuous F)
+ (S : Set β) : UniformEquicontinuousOn F S :=
+ fun U hU ↦ (H U hU).filter_mono inf_le_left
+
+lemma UniformEquicontinuousOn.mono {F : ι → β → α} {S T : Set β}
+ (H : UniformEquicontinuousOn F T) (hST : S ⊆ T) : UniformEquicontinuousOn F S :=
+ fun U hU ↦ (H U hU).filter_mono <| inf_le_inf_left _ <| principal_mono.mpr <| prod_mono hST hST
+
+lemma uniformEquicontinuousOn_univ (F : ι → β → α) :
+ UniformEquicontinuousOn F univ ↔ UniformEquicontinuous F := by
+ simp [UniformEquicontinuousOn, UniformEquicontinuous]
+
+lemma uniformEquicontinuous_restrict_iff (F : ι → β → α) {S : Set β} :
+ UniformEquicontinuous (S.restrict ∘ F) ↔ UniformEquicontinuousOn F S := by
+ rw [UniformEquicontinuous, UniformEquicontinuousOn]
+ conv in _ ⊓ _ => rw [← Subtype.range_val (s := S), ← range_prod_map, ← map_comap]
+
/-!
### Empty index type
-/
@@ -135,16 +218,31 @@ lemma equicontinuousAt_empty [h : IsEmpty ι] (F : ι → X → α) (x₀ : X) :
EquicontinuousAt F x₀ :=
fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+@[simp]
+lemma equicontinuousWithinAt_empty [h : IsEmpty ι] (F : ι → X → α) (S : Set X) (x₀ : X) :
+ EquicontinuousWithinAt F S x₀ :=
+ fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+
@[simp]
lemma equicontinuous_empty [IsEmpty ι] (F : ι → X → α) :
Equicontinuous F :=
equicontinuousAt_empty F
+@[simp]
+lemma equicontinuousOn_empty [IsEmpty ι] (F : ι → X → α) (S : Set X) :
+ EquicontinuousOn F S :=
+ fun x₀ _ ↦ equicontinuousWithinAt_empty F S x₀
+
@[simp]
lemma uniformEquicontinuous_empty [h : IsEmpty ι] (F : ι → β → α) :
UniformEquicontinuous F :=
fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+@[simp]
+lemma uniformEquicontinuousOn_empty [h : IsEmpty ι] (F : ι → β → α) (S : Set β) :
+ UniformEquicontinuousOn F S :=
+ fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+
/-!
### Finite index type
-/
@@ -154,14 +252,28 @@ theorem equicontinuousAt_finite [Finite ι] {F : ι → X → α} {x₀ : X} :
simp [EquicontinuousAt, ContinuousAt, (nhds_basis_uniformity' (𝓤 α).basis_sets).tendsto_right_iff,
UniformSpace.ball, @forall_swap _ ι]
+theorem equicontinuousWithinAt_finite [Finite ι] {F : ι → X → α} {S : Set X} {x₀ : X} :
+ EquicontinuousWithinAt F S x₀ ↔ ∀ i, ContinuousWithinAt (F i) S x₀ := by
+ simp [EquicontinuousWithinAt, ContinuousWithinAt,
+ (nhds_basis_uniformity' (𝓤 α).basis_sets).tendsto_right_iff, UniformSpace.ball,
+ @forall_swap _ ι]
+
theorem equicontinuous_finite [Finite ι] {F : ι → X → α} :
Equicontinuous F ↔ ∀ i, Continuous (F i) := by
simp only [Equicontinuous, equicontinuousAt_finite, continuous_iff_continuousAt, @forall_swap ι]
+theorem equicontinuousOn_finite [Finite ι] {F : ι → X → α} {S : Set X} :
+ EquicontinuousOn F S ↔ ∀ i, ContinuousOn (F i) S := by
+ simp only [EquicontinuousOn, equicontinuousWithinAt_finite, ContinuousOn, @forall_swap ι]
+
theorem uniformEquicontinuous_finite [Finite ι] {F : ι → β → α} :
UniformEquicontinuous F ↔ ∀ i, UniformContinuous (F i) := by
simp only [UniformEquicontinuous, eventually_all, @forall_swap _ ι]; rfl
+theorem uniformEquicontinuousOn_finite [Finite ι] {F : ι → β → α} {S : Set β} :
+ UniformEquicontinuousOn F S ↔ ∀ i, UniformContinuousOn (F i) S := by
+ simp only [UniformEquicontinuousOn, eventually_all, @forall_swap _ ι]; rfl
+
/-!
### Index type with a unique element
-/
@@ -170,96 +282,180 @@ theorem equicontinuousAt_unique [Unique ι] {F : ι → X → α} {x : X} :
EquicontinuousAt F x ↔ ContinuousAt (F default) x :=
equicontinuousAt_finite.trans Unique.forall_iff
+theorem equicontinuousWithinAt_unique [Unique ι] {F : ι → X → α} {S : Set X} {x : X} :
+ EquicontinuousWithinAt F S x ↔ ContinuousWithinAt (F default) S x :=
+ equicontinuousWithinAt_finite.trans Unique.forall_iff
+
theorem equicontinuous_unique [Unique ι] {F : ι → X → α} :
Equicontinuous F ↔ Continuous (F default) :=
equicontinuous_finite.trans Unique.forall_iff
+theorem equicontinuousOn_unique [Unique ι] {F : ι → X → α} {S : Set X} :
+ EquicontinuousOn F S ↔ ContinuousOn (F default) S :=
+ equicontinuousOn_finite.trans Unique.forall_iff
+
theorem uniformEquicontinuous_unique [Unique ι] {F : ι → β → α} :
UniformEquicontinuous F ↔ UniformContinuous (F default) :=
uniformEquicontinuous_finite.trans Unique.forall_iff
-/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
-only one with `x₀`. -/
-theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
- EquicontinuousAt F x₀ ↔
- ∀ U ∈ 𝓤 α, ∃ V ∈ 𝓝 x₀, ∀ x ∈ V, ∀ y ∈ V, ∀ i, (F i x, F i y) ∈ U := by
+theorem uniformEquicontinuousOn_unique [Unique ι] {F : ι → β → α} {S : Set β} :
+ UniformEquicontinuousOn F S ↔ UniformContinuousOn (F default) S :=
+ uniformEquicontinuousOn_finite.trans Unique.forall_iff
+
+/-- Reformulation of equicontinuity at `x₀` within a set `S`, comparing two variables near `x₀`
+instead of comparing only one with `x₀`. -/
+theorem equicontinuousWithinAt_iff_pair {F : ι → X → α} {S : Set X} {x₀ : X} (hx₀ : x₀ ∈ S) :
+ EquicontinuousWithinAt F S x₀ ↔
+ ∀ U ∈ 𝓤 α, ∃ V ∈ 𝓝[S] x₀, ∀ x ∈ V, ∀ y ∈ V, ∀ i, (F i x, F i y) ∈ U := by
constructor <;> intro H U hU
· rcases comp_symm_mem_uniformity_sets hU with ⟨V, hV, hVsymm, hVU⟩
refine' ⟨_, H V hV, fun x hx y hy i => hVU (prod_mk_mem_compRel _ (hy i))⟩
exact hVsymm.mk_mem_comm.mp (hx i)
· rcases H U hU with ⟨V, hV, hVU⟩
- filter_upwards [hV] using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
+ filter_upwards [hV] using fun x hx i => hVU x₀ (mem_of_mem_nhdsWithin hx₀ hV) x hx i
+
+/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
+only one with `x₀`. -/
+theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
+ EquicontinuousAt F x₀ ↔
+ ∀ U ∈ 𝓤 α, ∃ V ∈ 𝓝 x₀, ∀ x ∈ V, ∀ y ∈ V, ∀ i, (F i x, F i y) ∈ U := by
+ simp_rw [← equicontinuousWithinAt_univ, equicontinuousWithinAt_iff_pair (mem_univ x₀),
+ nhdsWithin_univ]
#align equicontinuous_at_iff_pair equicontinuousAt_iff_pair
/-- Uniform equicontinuity implies equicontinuity. -/
theorem UniformEquicontinuous.equicontinuous {F : ι → β → α} (h : UniformEquicontinuous F) :
- Equicontinuous F := fun x₀ U hU =>
- mem_of_superset (ball_mem_nhds x₀ (h U hU)) fun _ hx i => hx i
+ Equicontinuous F := fun x₀ U hU ↦
+ mem_of_superset (ball_mem_nhds x₀ (h U hU)) fun _ hx i ↦ hx i
#align uniform_equicontinuous.equicontinuous UniformEquicontinuous.equicontinuous
+/-- Uniform equicontinuity on a subset implies equicontinuity on that subset. -/
+theorem UniformEquicontinuousOn.equicontinuousOn {F : ι → β → α} {S : Set β}
+ (h : UniformEquicontinuousOn F S) :
+ EquicontinuousOn F S := fun _ hx₀ U hU ↦
+ mem_of_superset (ball_mem_nhdsWithin hx₀ (h U hU)) fun _ hx i ↦ hx i
+
/-- Each function of a family equicontinuous at `x₀` is continuous at `x₀`. -/
theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (i : ι) :
ContinuousAt (F i) x₀ :=
(UniformSpace.hasBasis_nhds _).tendsto_right_iff.2 fun U ⟨hU, _⟩ ↦ (h U hU).mono fun _x hx ↦ hx i
#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAt
+/-- Each function of a family equicontinuous at `x₀` within `S` is continuous at `x₀` within `S`. -/
+theorem EquicontinuousWithinAt.continuousWithinAt {F : ι → X → α} {S : Set X} {x₀ : X}
+ (h : EquicontinuousWithinAt F S x₀) (i : ι) :
+ ContinuousWithinAt (F i) S x₀ :=
+ (UniformSpace.hasBasis_nhds _).tendsto_right_iff.2 fun U ⟨hU, _⟩ ↦ (h U hU).mono fun _x hx ↦ hx i
+
protected theorem Set.EquicontinuousAt.continuousAt_of_mem {H : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) {f : X → α} (hf : f ∈ H) : ContinuousAt f x₀ :=
h.continuousAt ⟨f, hf⟩
#align set.equicontinuous_at.continuous_at_of_mem Set.EquicontinuousAt.continuousAt_of_mem
+protected theorem Set.EquicontinuousWithinAt.continuousWithinAt_of_mem {H : Set <| X → α}
+ {S : Set X} {x₀ : X} (h : H.EquicontinuousWithinAt S x₀) {f : X → α} (hf : f ∈ H) :
+ ContinuousWithinAt f S x₀ :=
+ h.continuousWithinAt ⟨f, hf⟩
+
/-- Each function of an equicontinuous family is continuous. -/
theorem Equicontinuous.continuous {F : ι → X → α} (h : Equicontinuous F) (i : ι) :
Continuous (F i) :=
continuous_iff_continuousAt.mpr fun x => (h x).continuousAt i
#align equicontinuous.continuous Equicontinuous.continuous
+/-- Each function of a family equicontinuous on `S` is continuous on `S`. -/
+theorem EquicontinuousOn.continuousOn {F : ι → X → α} {S : Set X} (h : EquicontinuousOn F S)
+ (i : ι) : ContinuousOn (F i) S :=
+ fun x hx ↦ (h x hx).continuousWithinAt i
+
protected theorem Set.Equicontinuous.continuous_of_mem {H : Set <| X → α} (h : H.Equicontinuous)
{f : X → α} (hf : f ∈ H) : Continuous f :=
h.continuous ⟨f, hf⟩
#align set.equicontinuous.continuous_of_mem Set.Equicontinuous.continuous_of_mem
+protected theorem Set.EquicontinuousOn.continuousOn_of_mem {H : Set <| X → α} {S : Set X}
+ (h : H.EquicontinuousOn S) {f : X → α} (hf : f ∈ H) : ContinuousOn f S :=
+ h.continuousOn ⟨f, hf⟩
+
/-- Each function of a uniformly equicontinuous family is uniformly continuous. -/
theorem UniformEquicontinuous.uniformContinuous {F : ι → β → α} (h : UniformEquicontinuous F)
(i : ι) : UniformContinuous (F i) := fun U hU =>
mem_map.mpr (mem_of_superset (h U hU) fun _ hxy => hxy i)
#align uniform_equicontinuous.uniform_continuous UniformEquicontinuous.uniformContinuous
+/-- Each function of a family uniformly equicontinuous on `S` is uniformly continuous on `S`. -/
+theorem UniformEquicontinuousOn.uniformContinuousOn {F : ι → β → α} {S : Set β}
+ (h : UniformEquicontinuousOn F S) (i : ι) :
+ UniformContinuousOn (F i) S := fun U hU =>
+ mem_map.mpr (mem_of_superset (h U hU) fun _ hxy => hxy i)
+
protected theorem Set.UniformEquicontinuous.uniformContinuous_of_mem {H : Set <| β → α}
(h : H.UniformEquicontinuous) {f : β → α} (hf : f ∈ H) : UniformContinuous f :=
h.uniformContinuous ⟨f, hf⟩
#align set.uniform_equicontinuous.uniform_continuous_of_mem Set.UniformEquicontinuous.uniformContinuous_of_mem
+protected theorem Set.UniformEquicontinuousOn.uniformContinuousOn_of_mem {H : Set <| β → α}
+ {S : Set β} (h : H.UniformEquicontinuousOn S) {f : β → α} (hf : f ∈ H) :
+ UniformContinuousOn f S :=
+ h.uniformContinuousOn ⟨f, hf⟩
+
/-- Taking sub-families preserves equicontinuity at a point. -/
theorem EquicontinuousAt.comp {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (u : κ → ι) :
EquicontinuousAt (F ∘ u) x₀ := fun U hU => (h U hU).mono fun _ H k => H (u k)
#align equicontinuous_at.comp EquicontinuousAt.comp
+/-- Taking sub-families preserves equicontinuity at a point within a subset. -/
+theorem EquicontinuousWithinAt.comp {F : ι → X → α} {S : Set X} {x₀ : X}
+ (h : EquicontinuousWithinAt F S x₀) (u : κ → ι) :
+ EquicontinuousWithinAt (F ∘ u) S x₀ :=
+ fun U hU ↦ (h U hU).mono fun _ H k => H (u k)
+
protected theorem Set.EquicontinuousAt.mono {H H' : Set <| X → α} {x₀ : X}
(h : H.EquicontinuousAt x₀) (hH : H' ⊆ H) : H'.EquicontinuousAt x₀ :=
h.comp (inclusion hH)
#align set.equicontinuous_at.mono Set.EquicontinuousAt.mono
+protected theorem Set.EquicontinuousWithinAt.mono {H H' : Set <| X → α} {S : Set X} {x₀ : X}
+ (h : H.EquicontinuousWithinAt S x₀) (hH : H' ⊆ H) : H'.EquicontinuousWithinAt S x₀ :=
+ h.comp (inclusion hH)
+
/-- Taking sub-families preserves equicontinuity. -/
theorem Equicontinuous.comp {F : ι → X → α} (h : Equicontinuous F) (u : κ → ι) :
Equicontinuous (F ∘ u) := fun x => (h x).comp u
#align equicontinuous.comp Equicontinuous.comp
+/-- Taking sub-families preserves equicontinuity on a subset. -/
+theorem EquicontinuousOn.comp {F : ι → X → α} {S : Set X} (h : EquicontinuousOn F S) (u : κ → ι) :
+ EquicontinuousOn (F ∘ u) S := fun x hx ↦ (h x hx).comp u
+
protected theorem Set.Equicontinuous.mono {H H' : Set <| X → α} (h : H.Equicontinuous)
(hH : H' ⊆ H) : H'.Equicontinuous :=
h.comp (inclusion hH)
#align set.equicontinuous.mono Set.Equicontinuous.mono
+protected theorem Set.EquicontinuousOn.mono {H H' : Set <| X → α} {S : Set X}
+ (h : H.EquicontinuousOn S) (hH : H' ⊆ H) : H'.EquicontinuousOn S :=
+ h.comp (inclusion hH)
+
/-- Taking sub-families preserves uniform equicontinuity. -/
theorem UniformEquicontinuous.comp {F : ι → β → α} (h : UniformEquicontinuous F) (u : κ → ι) :
UniformEquicontinuous (F ∘ u) := fun U hU => (h U hU).mono fun _ H k => H (u k)
#align uniform_equicontinuous.comp UniformEquicontinuous.comp
+/-- Taking sub-families preserves uniform equicontinuity on a subset. -/
+theorem UniformEquicontinuousOn.comp {F : ι → β → α} {S : Set β} (h : UniformEquicontinuousOn F S)
+ (u : κ → ι) : UniformEquicontinuousOn (F ∘ u) S :=
+ fun U hU ↦ (h U hU).mono fun _ H k => H (u k)
+
protected theorem Set.UniformEquicontinuous.mono {H H' : Set <| β → α} (h : H.UniformEquicontinuous)
(hH : H' ⊆ H) : H'.UniformEquicontinuous :=
h.comp (inclusion hH)
#align set.uniform_equicontinuous.mono Set.UniformEquicontinuous.mono
+protected theorem Set.UniformEquicontinuousOn.mono {H H' : Set <| β → α} {S : Set β}
+ (h : H.UniformEquicontinuousOn S) (hH : H' ⊆ H) : H'.UniformEquicontinuousOn S :=
+ h.comp (inclusion hH)
+
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff `range 𝓕` is equicontinuous at `x₀`,
i.e the family `(↑) : range F → X → α` is equicontinuous at `x₀`. -/
theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
@@ -267,6 +463,12 @@ theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
simp only [EquicontinuousAt, forall_subtype_range_iff]
#align equicontinuous_at_iff_range equicontinuousAt_iff_range
+/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` within `S` iff `range 𝓕` is equicontinuous
+at `x₀` within `S`, i.e the family `(↑) : range F → X → α` is equicontinuous at `x₀` within `S`. -/
+theorem equicontinuousWithinAt_iff_range {F : ι → X → α} {S : Set X} {x₀ : X} :
+ EquicontinuousWithinAt F S x₀ ↔ EquicontinuousWithinAt ((↑) : range F → X → α) S x₀ := by
+ simp only [EquicontinuousWithinAt, forall_subtype_range_iff]
+
/-- A family `𝓕 : ι → X → α` is equicontinuous iff `range 𝓕` is equicontinuous,
i.e the family `(↑) : range F → X → α` is equicontinuous. -/
theorem equicontinuous_iff_range {F : ι → X → α} :
@@ -274,13 +476,26 @@ theorem equicontinuous_iff_range {F : ι → X → α} :
forall_congr' fun _ => equicontinuousAt_iff_range
#align equicontinuous_iff_range equicontinuous_iff_range
+/-- A family `𝓕 : ι → X → α` is equicontinuous on `S` iff `range 𝓕` is equicontinuous on `S`,
+i.e the family `(↑) : range F → X → α` is equicontinuous on `S`. -/
+theorem equicontinuousOn_iff_range {F : ι → X → α} {S : Set X} :
+ EquicontinuousOn F S ↔ EquicontinuousOn ((↑) : range F → X → α) S :=
+ forall_congr' fun _ ↦ forall_congr' fun _ ↦ equicontinuousWithinAt_iff_range
+
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff `range 𝓕` is uniformly equicontinuous,
i.e the family `(↑) : range F → β → α` is uniformly equicontinuous. -/
-theorem uniformEquicontinuous_at_iff_range {F : ι → β → α} :
+theorem uniformEquicontinuous_iff_range {F : ι → β → α} :
UniformEquicontinuous F ↔ UniformEquicontinuous ((↑) : range F → β → α) :=
⟨fun h => by rw [← comp_rangeSplitting F]; exact h.comp _, fun h =>
h.comp (rangeFactorization F)⟩
-#align uniform_equicontinuous_at_iff_range uniformEquicontinuous_at_iff_range
+#align uniform_equicontinuous_at_iff_range uniformEquicontinuous_iff_range
+
+/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous on `S` iff `range 𝓕` is uniformly
+equicontinuous on `S`, i.e the family `(↑) : range F → β → α` is uniformly equicontinuous on `S`. -/
+theorem uniformEquicontinuousOn_iff_range {F : ι → β → α} {S : Set β} :
+ UniformEquicontinuousOn F S ↔ UniformEquicontinuousOn ((↑) : range F → β → α) S :=
+ ⟨fun h => by rw [← comp_rangeSplitting F]; exact h.comp _, fun h =>
+ h.comp (rangeFactorization F)⟩
section
@@ -296,6 +511,16 @@ theorem equicontinuousAt_iff_continuousAt {F : ι → X → α} {x₀ : X} :
rfl
#align equicontinuous_at_iff_continuous_at equicontinuousAt_iff_continuousAt
+/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` within `S` iff the function
+`swap 𝓕 : X → ι → α` is continuous at `x₀` within `S`
+*when `ι → α` is equipped with the topology of uniform convergence*. This is very useful for
+developping the equicontinuity API, but it should not be used directly for other purposes. -/
+theorem equicontinuousWithinAt_iff_continuousWithinAt {F : ι → X → α} {S : Set X} {x₀ : X} :
+ EquicontinuousWithinAt F S x₀ ↔
+ ContinuousWithinAt (ofFun ∘ Function.swap F : X → ι →ᵤ α) S x₀ := by
+ rw [ContinuousWithinAt, (UniformFun.hasBasis_nhds ι α _).tendsto_right_iff]
+ rfl
+
/-- A family `𝓕 : ι → X → α` is equicontinuous iff the function `swap 𝓕 : X → ι → α` is
continuous *when `ι → α` is equipped with the topology of uniform convergence*. This is
very useful for developping the equicontinuity API, but it should not be used directly for other
@@ -305,6 +530,14 @@ theorem equicontinuous_iff_continuous {F : ι → X → α} :
simp_rw [Equicontinuous, continuous_iff_continuousAt, equicontinuousAt_iff_continuousAt]
#align equicontinuous_iff_continuous equicontinuous_iff_continuous
+/-- A family `𝓕 : ι → X → α` is equicontinuous on `S` iff the function `swap 𝓕 : X → ι → α` is
+continuous on `S` *when `ι → α` is equipped with the topology of uniform convergence*. This is
+very useful for developping the equicontinuity API, but it should not be used directly for other
+purposes. -/
+theorem equicontinuousOn_iff_continuousOn {F : ι → X → α} {S : Set X} :
+ EquicontinuousOn F S ↔ ContinuousOn (ofFun ∘ Function.swap F : X → ι →ᵤ α) S := by
+ simp_rw [EquicontinuousOn, ContinuousOn, equicontinuousWithinAt_iff_continuousWithinAt]
+
/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous iff the function `swap 𝓕 : β → ι → α` is
uniformly continuous *when `ι → α` is equipped with the uniform structure of uniform convergence*.
This is very useful for developping the equicontinuity API, but it should not be used directly
@@ -315,54 +548,103 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
rfl
#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuous
-theorem equicontinuousAt_iInf_rng {α' : Type*} {u : κ → UniformSpace α'} {F : ι → X → α'}
- {x₀ : X} :
- @EquicontinuousAt _ _ _ _ (⨅ k, u k) F x₀ ↔ ∀ k, @EquicontinuousAt _ _ _ _ (u k) F x₀ := by
- simp only [@equicontinuousAt_iff_continuousAt _ _ _ _ _, topologicalSpace]
- unfold ContinuousAt
+/-- A family `𝓕 : ι → β → α` is uniformly equicontinuous on `S` iff the function
+`swap 𝓕 : β → ι → α` is uniformly continuous on `S`
+*when `ι → α` is equipped with the uniform structure of uniform convergence*. This is very useful
+for developping the equicontinuity API, but it should not be used directly for other purposes. -/
+theorem uniformEquicontinuousOn_iff_uniformContinuousOn {F : ι → β → α} {S : Set β} :
+ UniformEquicontinuousOn F S ↔ UniformContinuousOn (ofFun ∘ Function.swap F : β → ι →ᵤ α) S := by
+ rw [UniformContinuousOn, (UniformFun.hasBasis_uniformity ι α).tendsto_right_iff]
+ rfl
+
+theorem equicontinuousWithinAt_iInf_rng {u : κ → UniformSpace α'} {F : ι → X → α'}
+ {S : Set X} {x₀ : X} : EquicontinuousWithinAt (uα := ⨅ k, u k) F S x₀ ↔
+ ∀ k, EquicontinuousWithinAt (uα := u k) F S x₀ := by
+ simp only [equicontinuousWithinAt_iff_continuousWithinAt (uα := _), topologicalSpace]
+ unfold ContinuousWithinAt
rw [UniformFun.iInf_eq, toTopologicalSpace_iInf, nhds_iInf, tendsto_iInf]
-theorem equicontinuous_iInf_rng {α' : Type*} {u : κ → UniformSpace α'} {F : ι → X → α'} :
- @Equicontinuous _ _ _ _ (⨅ k, u k) F ↔ ∀ k, @Equicontinuous _ _ _ _ (u k) F := by
- simp_rw [@equicontinuous_iff_continuous _ _ _ _ _, UniformFun.topologicalSpace]
+theorem equicontinuousAt_iInf_rng {u : κ → UniformSpace α'} {F : ι → X → α'}
+ {x₀ : X} :
+ EquicontinuousAt (uα := ⨅ k, u k) F x₀ ↔ ∀ k, EquicontinuousAt (uα := u k) F x₀ := by
+ simp only [← equicontinuousWithinAt_univ (uα := _), equicontinuousWithinAt_iInf_rng]
+
+theorem equicontinuous_iInf_rng {u : κ → UniformSpace α'} {F : ι → X → α'} :
+ Equicontinuous (uα := ⨅ k, u k) F ↔ ∀ k, Equicontinuous (uα := u k) F := by
+ simp_rw [equicontinuous_iff_continuous (uα := _), UniformFun.topologicalSpace]
rw [UniformFun.iInf_eq, toTopologicalSpace_iInf, continuous_iInf_rng]
-theorem uniformEquicontinuous_iInf_rng {α' : Type*} {u : κ → UniformSpace α'} {F : ι → β → α'} :
- @UniformEquicontinuous _ _ _ (⨅ k, u k) _ F ↔ ∀ k, @UniformEquicontinuous _ _ _ (u k) _ F := by
- simp_rw [@uniformEquicontinuous_iff_uniformContinuous _ _ _ _]
+theorem equicontinuousOn_iInf_rng {u : κ → UniformSpace α'} {F : ι → X → α'}
+ {S : Set X} :
+ EquicontinuousOn (uα := ⨅ k, u k) F S ↔ ∀ k, EquicontinuousOn (uα := u k) F S := by
+ simp_rw [EquicontinuousOn, equicontinuousWithinAt_iInf_rng, @forall_swap _ κ]
+
+theorem uniformEquicontinuous_iInf_rng {u : κ → UniformSpace α'} {F : ι → β → α'} :
+ UniformEquicontinuous (uα := ⨅ k, u k) F ↔ ∀ k, UniformEquicontinuous (uα := u k) F := by
+ simp_rw [uniformEquicontinuous_iff_uniformContinuous (uα := _)]
rw [UniformFun.iInf_eq, uniformContinuous_iInf_rng]
-theorem equicontinuousAt_iInf_dom {X' : Type*} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
- {x₀ : X'} {k : κ} (hk : @EquicontinuousAt _ _ _ (t k) _ F x₀) :
- @EquicontinuousAt _ _ _ (⨅ k, t k) _ F x₀ := by
- simp? [@equicontinuousAt_iff_continuousAt _ _ _ _] at hk ⊢ says
- simp only [@equicontinuousAt_iff_continuousAt _ _ _ _] at hk ⊢
- unfold ContinuousAt at hk ⊢
+theorem uniformEquicontinuousOn_iInf_rng {u : κ → UniformSpace α'} {F : ι → β → α'}
+ {S : Set β} : UniformEquicontinuousOn (uα := ⨅ k, u k) F S ↔
+ ∀ k, UniformEquicontinuousOn (uα := u k) F S := by
+ simp_rw [uniformEquicontinuousOn_iff_uniformContinuousOn (uα := _)]
+ unfold UniformContinuousOn
+ rw [UniformFun.iInf_eq, iInf_uniformity, tendsto_iInf]
+
+theorem equicontinuousWithinAt_iInf_dom {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+ {S : Set X'} {x₀ : X'} {k : κ} (hk : EquicontinuousWithinAt (tX := t k) F S x₀) :
+ EquicontinuousWithinAt (tX := ⨅ k, t k) F S x₀ := by
+ simp [equicontinuousWithinAt_iff_continuousWithinAt (tX := _)] at hk ⊢
+ unfold ContinuousWithinAt nhdsWithin at hk ⊢
rw [nhds_iInf]
- exact tendsto_iInf' k hk
-
-theorem equicontinuous_iInf_dom {X' : Type*} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
- {k : κ} (hk : @Equicontinuous _ _ _ (t k) _ F) :
- @Equicontinuous _ _ _ (⨅ k, t k) _ F := by
- simp_rw [@equicontinuous_iff_continuous _ _ _ _] at hk ⊢
- exact continuous_iInf_dom hk
-
-theorem uniform_equicontinuous_infi_dom {β' : Type*} {u : κ → UniformSpace β'} {F : ι → β' → α}
- {k : κ} (hk : @UniformEquicontinuous _ _ _ _ (u k) F) :
- @UniformEquicontinuous _ _ _ _ (⨅ k, u k) F := by
- simp_rw [@uniformEquicontinuous_iff_uniformContinuous _ _ _ _ _] at hk ⊢
+ exact hk.mono_left <| inf_le_inf_right _ <| iInf_le _ k
+
+theorem equicontinuousAt_iInf_dom {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+ {x₀ : X'} {k : κ} (hk : EquicontinuousAt (tX := t k) F x₀) :
+ EquicontinuousAt (tX := ⨅ k, t k) F x₀ := by
+ rw [← equicontinuousWithinAt_univ (tX := _)] at hk ⊢
+ exact equicontinuousWithinAt_iInf_dom hk
+
+theorem equicontinuous_iInf_dom {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+ {k : κ} (hk : Equicontinuous (tX := t k) F) :
+ Equicontinuous (tX := ⨅ k, t k) F :=
+ fun x ↦ equicontinuousAt_iInf_dom (hk x)
+
+theorem equicontinuousOn_iInf_dom {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+ {S : Set X'} {k : κ} (hk : EquicontinuousOn (tX := t k) F S) :
+ EquicontinuousOn (tX := ⨅ k, t k) F S :=
+ fun x hx ↦ equicontinuousWithinAt_iInf_dom (hk x hx)
+
+theorem uniformEquicontinuous_iInf_dom {u : κ → UniformSpace β'} {F : ι → β' → α}
+ {k : κ} (hk : UniformEquicontinuous (uβ := u k) F) :
+ UniformEquicontinuous (uβ := ⨅ k, u k) F := by
+ simp_rw [uniformEquicontinuous_iff_uniformContinuous (uβ := _)] at hk ⊢
exact uniformContinuous_iInf_dom hk
-theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type*} {p : κ → Prop} {s : κ → Set X}
+theorem uniformEquicontinuousOn_iInf_dom {u : κ → UniformSpace β'} {F : ι → β' → α}
+ {S : Set β'} {k : κ} (hk : UniformEquicontinuousOn (uβ := u k) F S) :
+ UniformEquicontinuousOn (uβ := ⨅ k, u k) F S := by
+ simp_rw [uniformEquicontinuousOn_iff_uniformContinuousOn (uβ := _)] at hk ⊢
+ unfold UniformContinuousOn
+ rw [iInf_uniformity]
+ exact hk.mono_left <| inf_le_inf_right _ <| iInf_le _ k
+
+theorem Filter.HasBasis.equicontinuousAt_iff_left {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U := by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
hX.tendsto_iff (UniformFun.hasBasis_nhds ι α _)]
- simp only [Function.comp_apply, mem_setOf_eq, exists_prop]
rfl
#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_left
-theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type*} {p : κ → Prop} {s : κ → Set (α × α)}
+theorem Filter.HasBasis.equicontinuousWithinAt_iff_left {p : κ → Prop} {s : κ → Set X}
+ {F : ι → X → α} {S : Set X} {x₀ : X} (hX : (𝓝[S] x₀).HasBasis p s) :
+ EquicontinuousWithinAt F S x₀ ↔ ∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U := by
+ rw [equicontinuousWithinAt_iff_continuousWithinAt, ContinuousWithinAt,
+ hX.tendsto_iff (UniformFun.hasBasis_nhds ι α _)]
+ rfl
+
+theorem Filter.HasBasis.equicontinuousAt_iff_right {p : κ → Prop} {s : κ → Set (α × α)}
{F : ι → X → α} {x₀ : X} (hα : (𝓤 α).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ k, p k → ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ s k := by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
@@ -370,6 +652,13 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type*} {p : κ → Prop
rfl
#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_right
+theorem Filter.HasBasis.equicontinuousWithinAt_iff_right {p : κ → Prop}
+ {s : κ → Set (α × α)} {F : ι → X → α} {S : Set X} {x₀ : X} (hα : (𝓤 α).HasBasis p s) :
+ EquicontinuousWithinAt F S x₀ ↔ ∀ k, p k → ∀ᶠ x in 𝓝[S] x₀, ∀ i, (F i x₀, F i x) ∈ s k := by
+ rw [equicontinuousWithinAt_iff_continuousWithinAt, ContinuousWithinAt,
+ (UniformFun.hasBasis_nhds_of_basis ι α _ hα).tendsto_right_iff]
+ rfl
+
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -377,21 +666,38 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type*} {p₁ : κ₁
∀ k₂, p₂ k₂ → ∃ k₁, p₁ k₁ ∧ ∀ x ∈ s₁ k₁, ∀ i, (F i x₀, F i x) ∈ s₂ k₂ := by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
hX.tendsto_iff (UniformFun.hasBasis_nhds_of_basis ι α _ hα)]
- simp only [Function.comp_apply, mem_setOf_eq, exists_prop]
rfl
#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iff
-theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type*} {p : κ → Prop}
+theorem Filter.HasBasis.equicontinuousWithinAt_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop}
+ {s₁ : κ₁ → Set X} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {S : Set X} {x₀ : X}
+ (hX : (𝓝[S] x₀).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
+ EquicontinuousWithinAt F S x₀ ↔
+ ∀ k₂, p₂ k₂ → ∃ k₁, p₁ k₁ ∧ ∀ x ∈ s₁ k₁, ∀ i, (F i x₀, F i x) ∈ s₂ k₂ := by
+ rw [equicontinuousWithinAt_iff_continuousWithinAt, ContinuousWithinAt,
+ hX.tendsto_iff (UniformFun.hasBasis_nhds_of_basis ι α _ hα)]
+ rfl
+
+theorem Filter.HasBasis.uniformEquicontinuous_iff_left {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x y, (x, y) ∈ s k → ∀ i, (F i x, F i y) ∈ U := by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
hβ.tendsto_iff (UniformFun.hasBasis_uniformity ι α)]
- simp only [Prod.forall, Function.comp_apply, mem_setOf_eq, exists_prop]
+ simp only [Prod.forall]
rfl
#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_left
-theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type*} {p : κ → Prop}
+theorem Filter.HasBasis.uniformEquicontinuousOn_iff_left {p : κ → Prop}
+ {s : κ → Set (β × β)} {F : ι → β → α} {S : Set β} (hβ : (𝓤 β ⊓ 𝓟 (S ×ˢ S)).HasBasis p s) :
+ UniformEquicontinuousOn F S ↔
+ ∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x y, (x, y) ∈ s k → ∀ i, (F i x, F i y) ∈ U := by
+ rw [uniformEquicontinuousOn_iff_uniformContinuousOn, UniformContinuousOn,
+ hβ.tendsto_iff (UniformFun.hasBasis_uniformity ι α)]
+ simp only [Prod.forall]
+ rfl
+
+theorem Filter.HasBasis.uniformEquicontinuous_iff_right {p : κ → Prop}
{s : κ → Set (α × α)} {F : ι → β → α} (hα : (𝓤 α).HasBasis p s) :
UniformEquicontinuous F ↔ ∀ k, p k → ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ s k := by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
@@ -399,6 +705,14 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type*} {p : κ →
rfl
#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_right
+theorem Filter.HasBasis.uniformEquicontinuousOn_iff_right {p : κ → Prop}
+ {s : κ → Set (α × α)} {F : ι → β → α} {S : Set β} (hα : (𝓤 α).HasBasis p s) :
+ UniformEquicontinuousOn F S ↔
+ ∀ k, p k → ∀ᶠ xy : β × β in 𝓤 β ⊓ 𝓟 (S ×ˢ S), ∀ i, (F i xy.1, F i xy.2) ∈ s k := by
+ rw [uniformEquicontinuousOn_iff_uniformContinuousOn, UniformContinuousOn,
+ (UniformFun.hasBasis_uniformity_of_basis ι α hα).tendsto_right_iff]
+ rfl
+
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -406,12 +720,22 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type*} {p₁ :
∀ k₂, p₂ k₂ → ∃ k₁, p₁ k₁ ∧ ∀ x y, (x, y) ∈ s₁ k₁ → ∀ i, (F i x, F i y) ∈ s₂ k₂ := by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
hβ.tendsto_iff (UniformFun.hasBasis_uniformity_of_basis ι α hα)]
- simp only [Prod.forall, Function.comp_apply, mem_setOf_eq, exists_prop]
+ simp only [Prod.forall]
rfl
#align filter.has_basis.uniform_equicontinuous_iff Filter.HasBasis.uniformEquicontinuous_iff
+theorem Filter.HasBasis.uniformEquicontinuousOn_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop}
+ {s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
+ {S : Set β} (hβ : (𝓤 β ⊓ 𝓟 (S ×ˢ S)).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
+ UniformEquicontinuousOn F S ↔
+ ∀ k₂, p₂ k₂ → ∃ k₁, p₁ k₁ ∧ ∀ x y, (x, y) ∈ s₁ k₁ → ∀ i, (F i x, F i y) ∈ s₂ k₂ := by
+ rw [uniformEquicontinuousOn_iff_uniformContinuousOn, UniformContinuousOn,
+ hβ.tendsto_iff (UniformFun.hasBasis_uniformity_of_basis ι α hα)]
+ simp only [Prod.forall]
+ rfl
+
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
-`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
+`x₀ : X` iff the family `𝓕'`, obtained by composing each function of `𝓕` by `u`, is
equicontinuous at `x₀`. -/
theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u : α → β}
(hu : UniformInducing u) : EquicontinuousAt F x₀ ↔ EquicontinuousAt ((u ∘ ·) ∘ F) x₀ := by
@@ -420,110 +744,255 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
rfl
#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iff
+/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous at a point
+`x₀ : X` within a subset `S : Set X` iff the family `𝓕'`, obtained by composing each function
+of `𝓕` by `u`, is equicontinuous at `x₀` within `S`. -/
+theorem UniformInducing.equicontinuousWithinAt_iff {F : ι → X → α} {S : Set X} {x₀ : X} {u : α → β}
+ (hu : UniformInducing u) : EquicontinuousWithinAt F S x₀ ↔
+ EquicontinuousWithinAt ((u ∘ ·) ∘ F) S x₀ := by
+ have := (UniformFun.postcomp_uniformInducing (α := ι) hu).inducing
+ simp only [equicontinuousWithinAt_iff_continuousWithinAt, this.continuousWithinAt_iff]
+ rfl
+
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
-family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is equicontinuous. -/
+family `𝓕'`, obtained by composing each function of `𝓕` by `u`, is equicontinuous. -/
theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β} (hu : UniformInducing u) :
Equicontinuous F ↔ Equicontinuous ((u ∘ ·) ∘ F) := by
congrm ∀ x, ?_
rw [hu.equicontinuousAt_iff]
#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iff
+/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous on a
+subset `S : Set X` iff the family `𝓕'`, obtained by composing each function of `𝓕` by `u`, is
+equicontinuous on `S`. -/
+theorem UniformInducing.equicontinuousOn_iff {F : ι → X → α} {S : Set X} {u : α → β}
+ (hu : UniformInducing u) : EquicontinuousOn F S ↔ EquicontinuousOn ((u ∘ ·) ∘ F) S := by
+ congrm ∀ x ∈ S, ?_
+ rw [hu.equicontinuousWithinAt_iff]
+
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
-iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
+iff the family `𝓕'`, obtained by composing each function of `𝓕` by `u`, is uniformly
equicontinuous. -/
theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α → γ}
(hu : UniformInducing u) : UniformEquicontinuous F ↔ UniformEquicontinuous ((u ∘ ·) ∘ F) := by
have := UniformFun.postcomp_uniformInducing (α := ι) hu
- rw [uniformEquicontinuous_iff_uniformContinuous, uniformEquicontinuous_iff_uniformContinuous,
- this.uniformContinuous_iff]
+ simp only [uniformEquicontinuous_iff_uniformContinuous, this.uniformContinuous_iff]
rfl
#align uniform_inducing.uniform_equicontinuous_iff UniformInducing.uniformEquicontinuous_iff
-/-- A version of `EquicontinuousAt.closure` applicable to subsets of types which embed continuously
-into `X → α` with the product topology. It turns out we don't need any other condition on the
-embedding than continuity, but in practice this will mostly be applied to `DFunLike` types where
-the coercion is injective. -/
-theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
- (hA : EquicontinuousAt (u ∘ (↑) : A → X → α) x₀) (hu : Continuous u) :
- EquicontinuousAt (u ∘ (↑) : closure A → X → α) x₀ := by
+/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
+on a subset `S : Set β` iff the family `𝓕'`, obtained by composing each function of `𝓕` by `u`,
+is uniformly equicontinuous on `S`. -/
+theorem UniformInducing.uniformEquicontinuousOn_iff {F : ι → β → α} {S : Set β} {u : α → γ}
+ (hu : UniformInducing u) :
+ UniformEquicontinuousOn F S ↔ UniformEquicontinuousOn ((u ∘ ·) ∘ F) S := by
+ have := UniformFun.postcomp_uniformInducing (α := ι) hu
+ simp only [uniformEquicontinuousOn_iff_uniformContinuousOn, this.uniformContinuousOn_iff]
+ rfl
+
+/-- If a set of functions is equicontinuous at some `x₀` within a set `S`, the same is true for its
+closure in *any* topology for which evaluation at any `x ∈ S ∪ {x₀}` is continuous. Since
+this will be applied to `DFunLike` types, we state it for any topological space whith a map
+to `X → α` satisfying the right continuity conditions. See also `Set.EquicontinuousWithinAt.closure`
+for a more familiar (but weaker) statement.
+
+Note: This could *technically* be called `EquicontinuousWithinAt.closure` without name clashes
+with `Set.EquicontinuousWithinAt.closure`, but we don't do it because, even with a `protected`
+marker, it would introduce ambiguities while working in namespace `Set` (e.g, in the proof of
+any theorem called `Set.something`). -/
+theorem EquicontinuousWithinAt.closure' {A : Set Y} {u : Y → X → α} {S : Set X} {x₀ : X}
+ (hA : EquicontinuousWithinAt (u ∘ (↑) : A → X → α) S x₀) (hu₁ : Continuous (S.restrict ∘ u))
+ (hu₂ : Continuous (eval x₀ ∘ u)) :
+ EquicontinuousWithinAt (u ∘ (↑) : closure A → X → α) S x₀ := by
intro U hU
rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
- filter_upwards [hA V hV] with x hx
+ filter_upwards [hA V hV, eventually_mem_nhdsWithin] with x hx hxS
rw [SetCoe.forall] at *
change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
- refine' (closure_minimal hx <| hVclosed.preimage <| _).trans (preimage_mono hVU)
- exact Continuous.prod_mk ((continuous_apply x₀).comp hu) ((continuous_apply x).comp hu)
+ refine (closure_minimal hx <| hVclosed.preimage <| hu₂.prod_mk ?_).trans (preimage_mono hVU)
+ exact (continuous_apply ⟨x, hxS⟩).comp hu₁
+
+/-- If a set of functions is equicontinuous at some `x₀`, the same is true for its closure in *any*
+topology for which evaluation at any point is continuous. Since this will be applied to
+`DFunLike` types, we state it for any topological space whith a map to `X → α` satisfying the right
+continuity conditions. See also `Set.EquicontinuousAt.closure` for a more familiar statement. -/
+theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
+ (hA : EquicontinuousAt (u ∘ (↑) : A → X → α) x₀) (hu : Continuous u) :
+ EquicontinuousAt (u ∘ (↑) : closure A → X → α) x₀ := by
+ rw [← equicontinuousWithinAt_univ] at hA ⊢
+ exact hA.closure' (Pi.continuous_restrict _ |>.comp hu) (continuous_apply x₀ |>.comp hu)
#align equicontinuous_at.closure' EquicontinuousAt.closure'
/-- If a set of functions is equicontinuous at some `x₀`, its closure for the product topology is
also equicontinuous at `x₀`. -/
-protected theorem EquicontinuousAt.closure {A : Set (X → α)} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
- (closure A).EquicontinuousAt x₀ :=
- EquicontinuousAt.closure' (u := id) hA continuous_id
-#align equicontinuous_at.closure EquicontinuousAt.closure
-
-/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
-family `𝓕` is equicontinuous at some `x₀ : X`, then the limit is continuous at `x₀`. -/
-theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.NeBot] {F : ι → X → α}
- {f : X → α} {x₀ : X} (h₁ : Tendsto F l (𝓝 f)) (h₂ : EquicontinuousAt F x₀) :
- ContinuousAt f x₀ :=
- (equicontinuousAt_iff_range.mp h₂).closure.continuousAt
- ⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
-#align filter.tendsto.continuous_at_of_equicontinuous_at Filter.Tendsto.continuousAt_of_equicontinuousAt
-
-/-- A version of `Equicontinuous.closure` applicable to subsets of types which embed continuously
-into `X → α` with the product topology. It turns out we don't need any other condition on the
-embedding than continuity, but in practice this will mostly be applied to `DFunLike` types where
-the coercion is injective. -/
+protected theorem Set.EquicontinuousAt.closure {A : Set (X → α)} {x₀ : X}
+ (hA : A.EquicontinuousAt x₀) : (closure A).EquicontinuousAt x₀ :=
+ hA.closure' (u := id) continuous_id
+#align equicontinuous_at.closure Set.EquicontinuousAt.closure
+
+/-- If a set of functions is equicontinuous at some `x₀` within a set `S`, its closure for the
+product topology is also equicontinuous at `x₀` within `S`. This would also be true for the coarser
+topology of pointwise convergence on `S ∪ {x₀}`, see `Set.EquicontinuousWithinAt.closure'`. -/
+protected theorem Set.EquicontinuousWithinAt.closure {A : Set (X → α)} {S : Set X} {x₀ : X}
+ (hA : A.EquicontinuousWithinAt S x₀) :
+ (closure A).EquicontinuousWithinAt S x₀ :=
+ hA.closure' (u := id) (Pi.continuous_restrict _) (continuous_apply _)
+
+/-- If a set of functions is equicontinuous, the same is true for its closure in *any*
+topology for which evaluation at any point is continuous. Since this will be applied to
+`DFunLike` types, we state it for any topological space whith a map to `X → α` satisfying the right
+continuity conditions. See also `Set.Equicontinuous.closure` for a more familiar statement. -/
theorem Equicontinuous.closure' {A : Set Y} {u : Y → X → α}
(hA : Equicontinuous (u ∘ (↑) : A → X → α)) (hu : Continuous u) :
- Equicontinuous (u ∘ (↑) : closure A → X → α) := fun x => (hA x).closure' hu
+ Equicontinuous (u ∘ (↑) : closure A → X → α) := fun x ↦ (hA x).closure' hu
#align equicontinuous.closure' Equicontinuous.closure'
+/-- If a set of functions is equicontinuous on a set `S`, the same is true for its closure in *any*
+topology for which evaluation at any `x ∈ S` is continuous. Since this will be applied to
+`DFunLike` types, we state it for any topological space whith a map to `X → α` satisfying the right
+continuity conditions. See also `Set.EquicontinuousOn.closure` for a more familiar
+(but weaker) statement. -/
+theorem EquicontinuousOn.closure' {A : Set Y} {u : Y → X → α} {S : Set X}
+ (hA : EquicontinuousOn (u ∘ (↑) : A → X → α) S) (hu : Continuous (S.restrict ∘ u)) :
+ EquicontinuousOn (u ∘ (↑) : closure A → X → α) S :=
+ fun x hx ↦ (hA x hx).closure' hu <| by exact continuous_apply ⟨x, hx⟩ |>.comp hu
+
/-- If a set of functions is equicontinuous, its closure for the product topology is also
equicontinuous. -/
-theorem Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
- (closure A).Equicontinuous := fun x => (hA x).closure
-#align equicontinuous.closure Equicontinuous.closure
+protected theorem Set.Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
+ (closure A).Equicontinuous := fun x ↦ Set.EquicontinuousAt.closure (hA x)
+#align equicontinuous.closure Set.Equicontinuous.closure
-/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
-family `𝓕` is equicontinuous, then the limit is continuous. -/
-theorem Filter.Tendsto.continuous_of_equicontinuousAt {l : Filter ι} [l.NeBot] {F : ι → X → α}
- {f : X → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : Equicontinuous F) : Continuous f :=
- continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
-#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuousAt
-
-/-- A version of `UniformEquicontinuous.closure` applicable to subsets of types which embed
-continuously into `β → α` with the product topology. It turns out we don't need any other condition
-on the embedding than continuity, but in practice this will mostly be applied to `DFunLike` types
-where the coercion is injective. -/
-theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
- (hA : UniformEquicontinuous (u ∘ (↑) : A → β → α)) (hu : Continuous u) :
- UniformEquicontinuous (u ∘ (↑) : closure A → β → α) := by
+/-- If a set of functions is equicontinuous, its closure for the product topology is also
+equicontinuous. This would also be true for the coarser topology of pointwise convergence on `S`,
+see `EquicontinuousOn.closure'`. -/
+protected theorem Set.EquicontinuousOn.closure {A : Set <| X → α} {S : Set X}
+ (hA : A.EquicontinuousOn S) : (closure A).EquicontinuousOn S :=
+ fun x hx ↦ Set.EquicontinuousWithinAt.closure (hA x hx)
+
+/-- If a set of functions is uniformly equicontinuous on a set `S`, the same is true for its
+closure in *any* topology for which evaluation at any `x ∈ S` i continuous. Since this will be
+applied to `DFunLike` types, we state it for any topological space whith a map to `β → α` satisfying
+the right continuity conditions. See also `Set.UniformEquicontinuousOn.closure` for a more familiar
+(but weaker) statement. -/
+theorem UniformEquicontinuousOn.closure' {A : Set Y} {u : Y → β → α} {S : Set β}
+ (hA : UniformEquicontinuousOn (u ∘ (↑) : A → β → α) S) (hu : Continuous (S.restrict ∘ u)) :
+ UniformEquicontinuousOn (u ∘ (↑) : closure A → β → α) S := by
intro U hU
rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
- filter_upwards [hA V hV]
- rintro ⟨x, y⟩ hxy
+ filter_upwards [hA V hV, mem_inf_of_right (mem_principal_self _)]
+ rintro ⟨x, y⟩ hxy ⟨hxS, hyS⟩
rw [SetCoe.forall] at *
change A ⊆ (fun f => (u f x, u f y)) ⁻¹' V at hxy
- refine' (closure_minimal hxy <| hVclosed.preimage <| _).trans (preimage_mono hVU)
- exact Continuous.prod_mk ((continuous_apply x).comp hu) ((continuous_apply y).comp hu)
+ refine (closure_minimal hxy <| hVclosed.preimage <| .prod_mk ?_ ?_).trans (preimage_mono hVU)
+ · exact (continuous_apply ⟨x, hxS⟩).comp hu
+ · exact (continuous_apply ⟨y, hyS⟩).comp hu
+
+/-- If a set of functions is uniformly equicontinuous, the same is true for its closure in *any*
+topology for which evaluation at any point is continuous. Since this will be applied to
+`DFunLike` types, we state it for any topological space whith a map to `β → α` satisfying the right
+continuity conditions. See also `Set.UniformEquicontinuous.closure` for a more familiar statement.
+-/
+theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
+ (hA : UniformEquicontinuous (u ∘ (↑) : A → β → α)) (hu : Continuous u) :
+ UniformEquicontinuous (u ∘ (↑) : closure A → β → α) := by
+ rw [← uniformEquicontinuousOn_univ] at hA ⊢
+ exact hA.closure' (Pi.continuous_restrict _ |>.comp hu)
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
/-- If a set of functions is uniformly equicontinuous, its closure for the product topology is also
uniformly equicontinuous. -/
-theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEquicontinuous) :
- (closure A).UniformEquicontinuous :=
+protected theorem Set.UniformEquicontinuous.closure {A : Set <| β → α}
+ (hA : A.UniformEquicontinuous) : (closure A).UniformEquicontinuous :=
UniformEquicontinuous.closure' (u := id) hA continuous_id
-#align uniform_equicontinuous.closure UniformEquicontinuous.closure
+#align uniform_equicontinuous.closure Set.UniformEquicontinuous.closure
+
+/-- If a set of functions is uniformly equicontinuous on a set `S`, its closure for the product
+topology is also uniformly equicontinuous. This would also be true for the coarser topology of
+pointwise convergence on `S`, see `UniformEquicontinuousOn.closure'`.-/
+protected theorem Set.UniformEquicontinuousOn.closure {A : Set <| β → α} {S : Set β}
+ (hA : A.UniformEquicontinuousOn S) : (closure A).UniformEquicontinuousOn S :=
+ UniformEquicontinuousOn.closure' (u := id) hA (Pi.continuous_restrict _)
+
+/-
+Implementation note: The following lemma (as well as all the following variations) could
+theoretically be deduced from the "closure" statements above. For example, we could do:
+```lean
+theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.NeBot] {F : ι → X → α}
+ {f : X → α} {x₀ : X} (h₁ : Tendsto F l (𝓝 f)) (h₂ : EquicontinuousAt F x₀) :
+ ContinuousAt f x₀ :=
+ (equicontinuousAt_iff_range.mp h₂).closure.continuousAt
+ ⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
-/-- If `𝓕 : ι → β → α` tends to `f : β → α` *pointwise* along some nontrivial filter, and if the
-family `𝓕` is uniformly equicontinuous, then the limit is uniformly continuous. -/
theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι} [l.NeBot]
{F : ι → β → α} {f : β → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : UniformEquicontinuous F) :
UniformContinuous f :=
- (uniformEquicontinuous_at_iff_range.mp h₂).closure.uniformContinuous
+ (uniformEquicontinuous_iff_range.mp h₂).closure.uniformContinuous
⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
+```
+
+Unfortunately, the proofs get painful when dealing with the relative case as one needs to change
+the ambient topology. So it turns out to be easier to re-do the proof by hand.
+-/
+
+/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise on `S ∪ {x₀} : Set X`* along some nontrivial
+filter, and if the family `𝓕` is equicontinuous at `x₀ : X` within `S`, then the limit is
+continuous at `x₀` within `S`. -/
+theorem Filter.Tendsto.continuousWithinAt_of_equicontinuousWithinAt {l : Filter ι} [l.NeBot]
+ {F : ι → X → α} {f : X → α} {S : Set X} {x₀ : X} (h₁ : ∀ x ∈ S, Tendsto (F · x) l (𝓝 (f x)))
+ (h₂ : Tendsto (F · x₀) l (𝓝 (f x₀))) (h₃ : EquicontinuousWithinAt F S x₀) :
+ ContinuousWithinAt f S x₀ := by
+ intro U hU; rw [mem_map]
+ rcases UniformSpace.mem_nhds_iff.mp hU with ⟨V, hV, hVU⟩
+ rcases mem_uniformity_isClosed hV with ⟨W, hW, hWclosed, hWV⟩
+ filter_upwards [h₃ W hW, eventually_mem_nhdsWithin] with x hx hxS using
+ hVU <| ball_mono hWV (f x₀) <| hWclosed.mem_of_tendsto (h₂.prod_mk_nhds (h₁ x hxS)) <|
+ eventually_of_forall hx
+
+/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
+family `𝓕` is equicontinuous at some `x₀ : X`, then the limit is continuous at `x₀`. -/
+theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.NeBot] {F : ι → X → α}
+ {f : X → α} {x₀ : X} (h₁ : Tendsto F l (𝓝 f)) (h₂ : EquicontinuousAt F x₀) :
+ ContinuousAt f x₀ := by
+ rw [← continuousWithinAt_univ, ← equicontinuousWithinAt_univ, tendsto_pi_nhds] at *
+ exact continuousWithinAt_of_equicontinuousWithinAt (fun x _ ↦ h₁ x) (h₁ x₀) h₂
+#align filter.tendsto.continuous_at_of_equicontinuous_at Filter.Tendsto.continuousAt_of_equicontinuousAt
+
+/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
+family `𝓕` is equicontinuous, then the limit is continuous. -/
+theorem Filter.Tendsto.continuous_of_equicontinuous {l : Filter ι} [l.NeBot] {F : ι → X → α}
+ {f : X → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : Equicontinuous F) : Continuous f :=
+ continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
+#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous
+
+/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise on `S : Set X`* along some nontrivial
+filter, and if the family `𝓕` is equicontinuous, then the limit is continuous on `S`. -/
+theorem Filter.Tendsto.continuousOn_of_equicontinuousOn {l : Filter ι} [l.NeBot] {F : ι → X → α}
+ {f : X → α} {S : Set X} (h₁ : ∀ x ∈ S, Tendsto (F · x) l (𝓝 (f x)))
+ (h₂ : EquicontinuousOn F S) : ContinuousOn f S :=
+ fun x hx ↦ Filter.Tendsto.continuousWithinAt_of_equicontinuousWithinAt h₁ (h₁ x hx) (h₂ x hx)
+
+/-- If `𝓕 : ι → β → α` tends to `f : β → α` *pointwise on `S : Set β`* along some nontrivial
+filter, and if the family `𝓕` is uniformly equicontinuous on `S`, then the limit is uniformly
+continuous on `S`. -/
+theorem Filter.Tendsto.uniformContinuousOn_of_uniformEquicontinuousOn {l : Filter ι} [l.NeBot]
+ {F : ι → β → α} {f : β → α} {S : Set β} (h₁ : ∀ x ∈ S, Tendsto (F · x) l (𝓝 (f x)))
+ (h₂ : UniformEquicontinuousOn F S) :
+ UniformContinuousOn f S := by
+ intro U hU; rw [mem_map]
+ rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
+ filter_upwards [h₂ V hV, mem_inf_of_right (mem_principal_self _)]
+ rintro ⟨x, y⟩ hxy ⟨hxS, hyS⟩
+ exact hVU <| hVclosed.mem_of_tendsto ((h₁ x hxS).prod_mk_nhds (h₁ y hyS)) <|
+ eventually_of_forall hxy
+
+/-- If `𝓕 : ι → β → α` tends to `f : β → α` *pointwise* along some nontrivial filter, and if the
+family `𝓕` is uniformly equicontinuous, then the limit is uniformly continuous. -/
+theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι} [l.NeBot]
+ {F : ι → β → α} {f : β → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : UniformEquicontinuous F) :
+ UniformContinuous f := by
+ rw [← uniformContinuousOn_univ, ← uniformEquicontinuousOn_univ, tendsto_pi_nhds] at *
+ exact uniformContinuousOn_of_uniformEquicontinuousOn (fun x _ ↦ h₁ x) h₂
#align filter.tendsto.uniform_continuous_of_uniform_equicontinuous Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous
/-- If `F : ι → X → α` is a family of functions equicontinuous at `x`,
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -441,7 +441,7 @@ theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α
/-- A version of `EquicontinuousAt.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
-embedding than continuity, but in practice this will mostly be applied to `FunLike` types where
+embedding than continuity, but in practice this will mostly be applied to `DFunLike` types where
the coercion is injective. -/
theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
(hA : EquicontinuousAt (u ∘ (↑) : A → X → α) x₀) (hu : Continuous u) :
@@ -473,7 +473,7 @@ theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.NeBot
/-- A version of `Equicontinuous.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
-embedding than continuity, but in practice this will mostly be applied to `FunLike` types where
+embedding than continuity, but in practice this will mostly be applied to `DFunLike` types where
the coercion is injective. -/
theorem Equicontinuous.closure' {A : Set Y} {u : Y → X → α}
(hA : Equicontinuous (u ∘ (↑) : A → X → α)) (hu : Continuous u) :
@@ -495,7 +495,7 @@ theorem Filter.Tendsto.continuous_of_equicontinuousAt {l : Filter ι} [l.NeBot]
/-- A version of `UniformEquicontinuous.closure` applicable to subsets of types which embed
continuously into `β → α` with the product topology. It turns out we don't need any other condition
-on the embedding than continuity, but in practice this will mostly be applied to `FunLike` types
+on the embedding than continuity, but in practice this will mostly be applied to `DFunLike` types
where the coercion is injective. -/
theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
(hA : UniformEquicontinuous (u ∘ (↑) : A → β → α)) (hu : Continuous u) :
∃ x ∈ s, _
instead of ∃ (x) (_ : x ∈ s), _
(#9184)
Search for [∀∃].*(_
and manually replace some occurrences with more readable versions.
In case of ∀
, the new expressions are defeq to the old ones.
In case of ∃
, they differ by exists_prop
.
In some rare cases, golf proofs that needed fixing.
@@ -353,8 +353,6 @@ theorem uniform_equicontinuous_infi_dom {β' : Type*} {u : κ → UniformSpace
simp_rw [@uniformEquicontinuous_iff_uniformContinuous _ _ _ _ _] at hk ⊢
exact uniformContinuous_iInf_dom hk
--- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
--- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type*} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U := by
@@ -372,8 +370,6 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type*} {p : κ → Prop
rfl
#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_right
--- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
--- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -385,8 +381,6 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type*} {p₁ : κ₁
rfl
#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iff
--- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
--- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type*} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
@@ -405,8 +399,6 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type*} {p : κ →
rfl
#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_right
--- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
--- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
@@ -335,7 +335,8 @@ theorem uniformEquicontinuous_iInf_rng {α' : Type*} {u : κ → UniformSpace α
theorem equicontinuousAt_iInf_dom {X' : Type*} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
{x₀ : X'} {k : κ} (hk : @EquicontinuousAt _ _ _ (t k) _ F x₀) :
@EquicontinuousAt _ _ _ (⨅ k, t k) _ F x₀ := by
- simp [@equicontinuousAt_iff_continuousAt _ _ _ _] at hk ⊢
+ simp? [@equicontinuousAt_iff_continuousAt _ _ _ _] at hk ⊢ says
+ simp only [@equicontinuousAt_iff_continuousAt _ _ _ _] at hk ⊢
unfold ContinuousAt at hk ⊢
rw [nhds_iInf]
exact tendsto_iInf' k hk
(· op ·) a
by (a op ·)
(#8843)
I used the regex \(\(· (.) ·\) (.)\)
, replacing with ($2 $1 ·)
.
@@ -421,7 +421,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type*} {p₁ :
`x₀ : X` iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is
equicontinuous at `x₀`. -/
theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u : α → β}
- (hu : UniformInducing u) : EquicontinuousAt F x₀ ↔ EquicontinuousAt ((· ∘ ·) u ∘ F) x₀ := by
+ (hu : UniformInducing u) : EquicontinuousAt F x₀ ↔ EquicontinuousAt ((u ∘ ·) ∘ F) x₀ := by
have := (UniformFun.postcomp_uniformInducing (α := ι) hu).inducing
rw [equicontinuousAt_iff_continuousAt, equicontinuousAt_iff_continuousAt, this.continuousAt_iff]
rfl
@@ -430,7 +430,7 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
/-- Given `u : α → β` a uniform inducing map, a family `𝓕 : ι → X → α` is equicontinuous iff the
family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is equicontinuous. -/
theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β} (hu : UniformInducing u) :
- Equicontinuous F ↔ Equicontinuous ((· ∘ ·) u ∘ F) := by
+ Equicontinuous F ↔ Equicontinuous ((u ∘ ·) ∘ F) := by
congrm ∀ x, ?_
rw [hu.equicontinuousAt_iff]
#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iff
@@ -439,7 +439,7 @@ theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β}
iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is uniformly
equicontinuous. -/
theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α → γ}
- (hu : UniformInducing u) : UniformEquicontinuous F ↔ UniformEquicontinuous ((· ∘ ·) u ∘ F) := by
+ (hu : UniformInducing u) : UniformEquicontinuous F ↔ UniformEquicontinuous ((u ∘ ·) ∘ F) := by
have := UniformFun.postcomp_uniformInducing (α := ι) hu
rw [uniformEquicontinuous_iff_uniformContinuous, uniformEquicontinuous_iff_uniformContinuous,
this.uniformContinuous_iff]
Removes nonterminal simps on lines looking like simp [...]
@@ -318,7 +318,7 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
theorem equicontinuousAt_iInf_rng {α' : Type*} {u : κ → UniformSpace α'} {F : ι → X → α'}
{x₀ : X} :
@EquicontinuousAt _ _ _ _ (⨅ k, u k) F x₀ ↔ ∀ k, @EquicontinuousAt _ _ _ _ (u k) F x₀ := by
- simp [@equicontinuousAt_iff_continuousAt _ _ _ _ _, UniformFun.topologicalSpace]
+ simp only [@equicontinuousAt_iff_continuousAt _ _ _ _ _, topologicalSpace]
unfold ContinuousAt
rw [UniformFun.iInf_eq, toTopologicalSpace_iInf, nhds_iInf, tendsto_iInf]
If F : ι → X → α
is an equicontinuous family of functions
and f : X → α
is a continuous function,
then {x | Tendsto (F · x) l (𝓝 (f x))}
is a closed set.
@@ -464,7 +464,7 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
/-- If a set of functions is equicontinuous at some `x₀`, its closure for the product topology is
also equicontinuous at `x₀`. -/
-theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
+protected theorem EquicontinuousAt.closure {A : Set (X → α)} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
(closure A).EquicontinuousAt x₀ :=
EquicontinuousAt.closure' (u := id) hA continuous_id
#align equicontinuous_at.closure EquicontinuousAt.closure
@@ -533,6 +533,35 @@ theorem Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous {l : Filter ι
⟨f, mem_closure_of_tendsto h₁ <| eventually_of_forall mem_range_self⟩
#align filter.tendsto.uniform_continuous_of_uniform_equicontinuous Filter.Tendsto.uniformContinuous_of_uniformEquicontinuous
+/-- If `F : ι → X → α` is a family of functions equicontinuous at `x`,
+it tends to `f y` along a filter `l` for any `y ∈ s`,
+the limit function `f` tends to `z` along `𝓝[s] x`, and `x ∈ closure s`,
+then `(F · x)` tends to `z` along `l`.
+
+In some sense, this is a converse of `EquicontinuousAt.closure`. -/
+theorem EquicontinuousAt.tendsto_of_mem_closure {l : Filter ι} {F : ι → X → α} {f : X → α}
+ {s : Set X} {x : X} {z : α} (hF : EquicontinuousAt F x) (hf : Tendsto f (𝓝[s] x) (𝓝 z))
+ (hs : ∀ y ∈ s, Tendsto (F · y) l (𝓝 (f y))) (hx : x ∈ closure s) :
+ Tendsto (F · x) l (𝓝 z) := by
+ rw [(nhds_basis_uniformity (𝓤 α).basis_sets).tendsto_right_iff] at hf ⊢
+ intro U hU
+ rcases comp_comp_symm_mem_uniformity_sets hU with ⟨V, hV, hVs, hVU⟩
+ rw [mem_closure_iff_nhdsWithin_neBot] at hx
+ have : ∀ᶠ y in 𝓝[s] x, y ∈ s ∧ (∀ i, (F i x, F i y) ∈ V) ∧ (f y, z) ∈ V :=
+ eventually_mem_nhdsWithin.and <| ((hF V hV).filter_mono nhdsWithin_le_nhds).and (hf V hV)
+ rcases this.exists with ⟨y, hys, hFy, hfy⟩
+ filter_upwards [hs y hys (ball_mem_nhds _ hV)] with i hi
+ exact hVU ⟨_, ⟨_, hFy i, (mem_ball_symmetry hVs).2 hi⟩, hfy⟩
+
+/-- If `F : ι → X → α` is an equicontinuous family of functions,
+`f : X → α` is a continuous function, and `l` is a filter on `ι`,
+then `{x | Filter.Tendsto (F · x) l (𝓝 (f x))}` is a closed set. -/
+theorem Equicontinuous.isClosed_setOf_tendsto {l : Filter ι} {F : ι → X → α} {f : X → α}
+ (hF : Equicontinuous F) (hf : Continuous f) :
+ IsClosed {x | Tendsto (F · x) l (𝓝 (f x))} :=
+ closure_subset_iff_isClosed.mp fun x hx ↦
+ (hF x).tendsto_of_mem_closure (hf.continuousAt.mono_left inf_le_left) (fun _ ↦ id) hx
+
end
end
Rename:
tendsto_iff_norm_tendsto_one
→
tendsto_iff_norm_div_tendsto_zero
;tendsto_iff_norm_tendsto_zero
→
tendsto_iff_norm_sub_tendsto_zero
;tendsto_one_iff_norm_tendsto_one
→
tendsto_one_iff_norm_tendsto_zero
;Filter.Tendsto.continuous_of_equicontinuous_at
→
Filter.Tendsto.continuous_of_equicontinuousAt
.@@ -495,10 +495,10 @@ theorem Equicontinuous.closure {A : Set <| X → α} (hA : A.Equicontinuous) :
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
family `𝓕` is equicontinuous, then the limit is continuous. -/
-theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.NeBot] {F : ι → X → α}
+theorem Filter.Tendsto.continuous_of_equicontinuousAt {l : Filter ι} [l.NeBot] {F : ι → X → α}
{f : X → α} (h₁ : Tendsto F l (𝓝 f)) (h₂ : Equicontinuous F) : Continuous f :=
continuous_iff_continuousAt.mpr fun x => h₁.continuousAt_of_equicontinuousAt (h₂ x)
-#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuous_at
+#align filter.tendsto.continuous_of_equicontinuous_at Filter.Tendsto.continuous_of_equicontinuousAt
/-- A version of `UniformEquicontinuous.closure` applicable to subsets of types which embed
continuously into `β → α` with the product topology. It turns out we don't need any other condition
@@ -126,18 +126,58 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
UniformEquicontinuous ((↑) : H → β → α)
#align set.uniform_equicontinuous Set.UniformEquicontinuous
+/-!
+### Empty index type
+-/
+
+@[simp]
lemma equicontinuousAt_empty [h : IsEmpty ι] (F : ι → X → α) (x₀ : X) :
EquicontinuousAt F x₀ :=
fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+@[simp]
lemma equicontinuous_empty [IsEmpty ι] (F : ι → X → α) :
Equicontinuous F :=
equicontinuousAt_empty F
+@[simp]
lemma uniformEquicontinuous_empty [h : IsEmpty ι] (F : ι → β → α) :
UniformEquicontinuous F :=
fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+/-!
+### Finite index type
+-/
+
+theorem equicontinuousAt_finite [Finite ι] {F : ι → X → α} {x₀ : X} :
+ EquicontinuousAt F x₀ ↔ ∀ i, ContinuousAt (F i) x₀ := by
+ simp [EquicontinuousAt, ContinuousAt, (nhds_basis_uniformity' (𝓤 α).basis_sets).tendsto_right_iff,
+ UniformSpace.ball, @forall_swap _ ι]
+
+theorem equicontinuous_finite [Finite ι] {F : ι → X → α} :
+ Equicontinuous F ↔ ∀ i, Continuous (F i) := by
+ simp only [Equicontinuous, equicontinuousAt_finite, continuous_iff_continuousAt, @forall_swap ι]
+
+theorem uniformEquicontinuous_finite [Finite ι] {F : ι → β → α} :
+ UniformEquicontinuous F ↔ ∀ i, UniformContinuous (F i) := by
+ simp only [UniformEquicontinuous, eventually_all, @forall_swap _ ι]; rfl
+
+/-!
+### Index type with a unique element
+-/
+
+theorem equicontinuousAt_unique [Unique ι] {F : ι → X → α} {x : X} :
+ EquicontinuousAt F x ↔ ContinuousAt (F default) x :=
+ equicontinuousAt_finite.trans Unique.forall_iff
+
+theorem equicontinuous_unique [Unique ι] {F : ι → X → α} :
+ Equicontinuous F ↔ Continuous (F default) :=
+ equicontinuous_finite.trans Unique.forall_iff
+
+theorem uniformEquicontinuous_unique [Unique ι] {F : ι → β → α} :
+ UniformEquicontinuous F ↔ UniformContinuous (F default) :=
+ uniformEquicontinuous_finite.trans Unique.forall_iff
+
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
@@ -148,7 +188,7 @@ theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
refine' ⟨_, H V hV, fun x hx y hy i => hVU (prod_mk_mem_compRel _ (hy i))⟩
exact hVsymm.mk_mem_comm.mp (hx i)
· rcases H U hU with ⟨V, hV, hVU⟩
- filter_upwards [hV]using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
+ filter_upwards [hV] using fun x hx i => hVU x₀ (mem_of_mem_nhds hV) x hx i
#align equicontinuous_at_iff_pair equicontinuousAt_iff_pair
/-- Uniform equicontinuity implies equicontinuity. -/
@@ -159,11 +199,8 @@ theorem UniformEquicontinuous.equicontinuous {F : ι → β → α} (h : Uniform
/-- Each function of a family equicontinuous at `x₀` is continuous at `x₀`. -/
theorem EquicontinuousAt.continuousAt {F : ι → X → α} {x₀ : X} (h : EquicontinuousAt F x₀) (i : ι) :
- ContinuousAt (F i) x₀ := by
- intro U hU
- rw [UniformSpace.mem_nhds_iff] at hU
- rcases hU with ⟨V, hV₁, hV₂⟩
- exact mem_map.mpr (mem_of_superset (h V hV₁) fun x hx => hV₂ (hx i))
+ ContinuousAt (F i) x₀ :=
+ (UniformSpace.hasBasis_nhds _).tendsto_right_iff.2 fun U ⟨hU, _⟩ ↦ (h U hU).mono fun _x hx ↦ hx i
#align equicontinuous_at.continuous_at EquicontinuousAt.continuousAt
protected theorem Set.EquicontinuousAt.continuousAt_of_mem {H : Set <| X → α} {x₀ : X}
@@ -226,9 +263,8 @@ protected theorem Set.UniformEquicontinuous.mono {H H' : Set <| β → α} (h :
/-- A family `𝓕 : ι → X → α` is equicontinuous at `x₀` iff `range 𝓕` is equicontinuous at `x₀`,
i.e the family `(↑) : range F → X → α` is equicontinuous at `x₀`. -/
theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
- EquicontinuousAt F x₀ ↔ EquicontinuousAt ((↑) : range F → X → α) x₀ :=
- ⟨fun h => by rw [← comp_rangeSplitting F]; exact h.comp _,
- fun h => h.comp (rangeFactorization F)⟩
+ EquicontinuousAt F x₀ ↔ EquicontinuousAt ((↑) : range F → X → α) x₀ := by
+ simp only [EquicontinuousAt, forall_subtype_range_iff]
#align equicontinuous_at_iff_range equicontinuousAt_iff_range
/-- A family `𝓕 : ι → X → α` is equicontinuous iff `range 𝓕` is equicontinuous,
@@ -419,7 +455,7 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
EquicontinuousAt (u ∘ (↑) : closure A → X → α) x₀ := by
intro U hU
rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
- filter_upwards [hA V hV]with x hx
+ filter_upwards [hA V hV] with x hx
rw [SetCoe.forall] at *
change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
refine' (closure_minimal hx <| hVclosed.preimage <| _).trans (preimage_mono hVU)
congr(...)
congruence quotations and port congrm
tactic (#2544)
Adds a term elaborator for congr(...)
"congruence quotations". For example, if hf : f = f'
and hx : x = x'
, then we have congr($hf $x) : f x = f' x'
. This supports the functions having implicit arguments, and it has support for subsingleton instance arguments. So for example, if s t : Set X
are sets with Fintype
instances and h : s = t
then congr(Fintype.card $h) : Fintype.card s = Fintype.card t
works.
Ports the congrm
tactic as a convenient frontend for applying a congruence quotation to the goal. Holes are turned into congruence holes. For example, congrm 1 + ?_
uses congr(1 + $(?_))
. Placeholders (_
) do not turn into congruence holes; that's not to say they have to be identical on the LHS and RHS, but congrm
itself is responsible for finding a congruence lemma for such arguments.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Moritz Doll <moritz.doll@googlemail.com>
@@ -395,13 +395,8 @@ theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u
family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`, is equicontinuous. -/
theorem UniformInducing.equicontinuous_iff {F : ι → X → α} {u : α → β} (hu : UniformInducing u) :
Equicontinuous F ↔ Equicontinuous ((· ∘ ·) u ∘ F) := by
- have : ∀ x, EquicontinuousAt F x ↔ EquicontinuousAt ((fun x x_1 => x ∘ x_1) u ∘ F) x := by
- intro
- rw [hu.equicontinuousAt_iff]
- exact ⟨fun h x => (this x).mp (h x), fun h x => (this x).mpr (h x)⟩
- -- Porting note: proof was:
- -- congrm (∀ x, _ : Prop)
- -- rw [hu.equicontinuousAt_iff]
+ congrm ∀ x, ?_
+ rw [hu.equicontinuousAt_iff]
#align uniform_inducing.equicontinuous_iff UniformInducing.equicontinuous_iff
/-- Given `u : α → γ` a uniform inducing map, a family `𝓕 : ι → β → α` is uniformly equicontinuous
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -85,7 +85,7 @@ section
open UniformSpace Filter Set Uniformity Topology UniformConvergence
-variable {ι κ X Y Z α β γ 𝓕 : Type _} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
+variable {ι κ X Y Z α β γ 𝓕 : Type*} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
[UniformSpace α] [UniformSpace β] [UniformSpace γ]
/-- A family `F : ι → X → α` of functions from a topological space to a uniform space is
@@ -279,24 +279,24 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
rfl
#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuous
-theorem equicontinuousAt_iInf_rng {α' : Type _} {u : κ → UniformSpace α'} {F : ι → X → α'}
+theorem equicontinuousAt_iInf_rng {α' : Type*} {u : κ → UniformSpace α'} {F : ι → X → α'}
{x₀ : X} :
@EquicontinuousAt _ _ _ _ (⨅ k, u k) F x₀ ↔ ∀ k, @EquicontinuousAt _ _ _ _ (u k) F x₀ := by
simp [@equicontinuousAt_iff_continuousAt _ _ _ _ _, UniformFun.topologicalSpace]
unfold ContinuousAt
rw [UniformFun.iInf_eq, toTopologicalSpace_iInf, nhds_iInf, tendsto_iInf]
-theorem equicontinuous_iInf_rng {α' : Type _} {u : κ → UniformSpace α'} {F : ι → X → α'} :
+theorem equicontinuous_iInf_rng {α' : Type*} {u : κ → UniformSpace α'} {F : ι → X → α'} :
@Equicontinuous _ _ _ _ (⨅ k, u k) F ↔ ∀ k, @Equicontinuous _ _ _ _ (u k) F := by
simp_rw [@equicontinuous_iff_continuous _ _ _ _ _, UniformFun.topologicalSpace]
rw [UniformFun.iInf_eq, toTopologicalSpace_iInf, continuous_iInf_rng]
-theorem uniformEquicontinuous_iInf_rng {α' : Type _} {u : κ → UniformSpace α'} {F : ι → β → α'} :
+theorem uniformEquicontinuous_iInf_rng {α' : Type*} {u : κ → UniformSpace α'} {F : ι → β → α'} :
@UniformEquicontinuous _ _ _ (⨅ k, u k) _ F ↔ ∀ k, @UniformEquicontinuous _ _ _ (u k) _ F := by
simp_rw [@uniformEquicontinuous_iff_uniformContinuous _ _ _ _]
rw [UniformFun.iInf_eq, uniformContinuous_iInf_rng]
-theorem equicontinuousAt_iInf_dom {X' : Type _} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+theorem equicontinuousAt_iInf_dom {X' : Type*} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
{x₀ : X'} {k : κ} (hk : @EquicontinuousAt _ _ _ (t k) _ F x₀) :
@EquicontinuousAt _ _ _ (⨅ k, t k) _ F x₀ := by
simp [@equicontinuousAt_iff_continuousAt _ _ _ _] at hk ⊢
@@ -304,13 +304,13 @@ theorem equicontinuousAt_iInf_dom {X' : Type _} {t : κ → TopologicalSpace X'}
rw [nhds_iInf]
exact tendsto_iInf' k hk
-theorem equicontinuous_iInf_dom {X' : Type _} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+theorem equicontinuous_iInf_dom {X' : Type*} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
{k : κ} (hk : @Equicontinuous _ _ _ (t k) _ F) :
@Equicontinuous _ _ _ (⨅ k, t k) _ F := by
simp_rw [@equicontinuous_iff_continuous _ _ _ _] at hk ⊢
exact continuous_iInf_dom hk
-theorem uniform_equicontinuous_infi_dom {β' : Type _} {u : κ → UniformSpace β'} {F : ι → β' → α}
+theorem uniform_equicontinuous_infi_dom {β' : Type*} {u : κ → UniformSpace β'} {F : ι → β' → α}
{k : κ} (hk : @UniformEquicontinuous _ _ _ _ (u k) F) :
@UniformEquicontinuous _ _ _ _ (⨅ k, u k) F := by
simp_rw [@uniformEquicontinuous_iff_uniformContinuous _ _ _ _ _] at hk ⊢
@@ -318,7 +318,7 @@ theorem uniform_equicontinuous_infi_dom {β' : Type _} {u : κ → UniformSpace
-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
-- second one when parsing expressions like `∃ δ > 0, _`.
-theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
+theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type*} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U := by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
@@ -327,7 +327,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop
rfl
#align filter.has_basis.equicontinuous_at_iff_left Filter.HasBasis.equicontinuousAt_iff_left
-theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Prop} {s : κ → Set (α × α)}
+theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type*} {p : κ → Prop} {s : κ → Set (α × α)}
{F : ι → X → α} {x₀ : X} (hα : (𝓤 α).HasBasis p s) :
EquicontinuousAt F x₀ ↔ ∀ k, p k → ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ s k := by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
@@ -337,7 +337,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Pro
-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
-- second one when parsing expressions like `∃ δ > 0, _`.
-theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
+theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
EquicontinuousAt F x₀ ↔
@@ -350,7 +350,7 @@ theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ
-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
-- second one when parsing expressions like `∃ δ > 0, _`.
-theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ → Prop}
+theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type*} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x y, (x, y) ∈ s k → ∀ i, (F i x, F i y) ∈ U := by
@@ -360,7 +360,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ →
rfl
#align filter.has_basis.uniform_equicontinuous_iff_left Filter.HasBasis.uniformEquicontinuous_iff_left
-theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ → Prop}
+theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type*} {p : κ → Prop}
{s : κ → Set (α × α)} {F : ι → β → α} (hα : (𝓤 α).HasBasis p s) :
UniformEquicontinuous F ↔ ∀ k, p k → ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ s k := by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
@@ -370,7 +370,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ
-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
-- second one when parsing expressions like `∃ δ > 0, _`.
-theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop}
+theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type*} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
UniformEquicontinuous F ↔
@@ -126,6 +126,18 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
UniformEquicontinuous ((↑) : H → β → α)
#align set.uniform_equicontinuous Set.UniformEquicontinuous
+lemma equicontinuousAt_empty [h : IsEmpty ι] (F : ι → X → α) (x₀ : X) :
+ EquicontinuousAt F x₀ :=
+ fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+
+lemma equicontinuous_empty [IsEmpty ι] (F : ι → X → α) :
+ Equicontinuous F :=
+ equicontinuousAt_empty F
+
+lemma uniformEquicontinuous_empty [h : IsEmpty ι] (F : ι → β → α) :
+ UniformEquicontinuous F :=
+ fun _ _ ↦ eventually_of_forall (fun _ ↦ h.elim)
+
/-- Reformulation of equicontinuity at `x₀` comparing two variables near `x₀` instead of comparing
only one with `x₀`. -/
theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
@@ -267,6 +279,43 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
rfl
#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuous
+theorem equicontinuousAt_iInf_rng {α' : Type _} {u : κ → UniformSpace α'} {F : ι → X → α'}
+ {x₀ : X} :
+ @EquicontinuousAt _ _ _ _ (⨅ k, u k) F x₀ ↔ ∀ k, @EquicontinuousAt _ _ _ _ (u k) F x₀ := by
+ simp [@equicontinuousAt_iff_continuousAt _ _ _ _ _, UniformFun.topologicalSpace]
+ unfold ContinuousAt
+ rw [UniformFun.iInf_eq, toTopologicalSpace_iInf, nhds_iInf, tendsto_iInf]
+
+theorem equicontinuous_iInf_rng {α' : Type _} {u : κ → UniformSpace α'} {F : ι → X → α'} :
+ @Equicontinuous _ _ _ _ (⨅ k, u k) F ↔ ∀ k, @Equicontinuous _ _ _ _ (u k) F := by
+ simp_rw [@equicontinuous_iff_continuous _ _ _ _ _, UniformFun.topologicalSpace]
+ rw [UniformFun.iInf_eq, toTopologicalSpace_iInf, continuous_iInf_rng]
+
+theorem uniformEquicontinuous_iInf_rng {α' : Type _} {u : κ → UniformSpace α'} {F : ι → β → α'} :
+ @UniformEquicontinuous _ _ _ (⨅ k, u k) _ F ↔ ∀ k, @UniformEquicontinuous _ _ _ (u k) _ F := by
+ simp_rw [@uniformEquicontinuous_iff_uniformContinuous _ _ _ _]
+ rw [UniformFun.iInf_eq, uniformContinuous_iInf_rng]
+
+theorem equicontinuousAt_iInf_dom {X' : Type _} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+ {x₀ : X'} {k : κ} (hk : @EquicontinuousAt _ _ _ (t k) _ F x₀) :
+ @EquicontinuousAt _ _ _ (⨅ k, t k) _ F x₀ := by
+ simp [@equicontinuousAt_iff_continuousAt _ _ _ _] at hk ⊢
+ unfold ContinuousAt at hk ⊢
+ rw [nhds_iInf]
+ exact tendsto_iInf' k hk
+
+theorem equicontinuous_iInf_dom {X' : Type _} {t : κ → TopologicalSpace X'} {F : ι → X' → α}
+ {k : κ} (hk : @Equicontinuous _ _ _ (t k) _ F) :
+ @Equicontinuous _ _ _ (⨅ k, t k) _ F := by
+ simp_rw [@equicontinuous_iff_continuous _ _ _ _] at hk ⊢
+ exact continuous_iInf_dom hk
+
+theorem uniform_equicontinuous_infi_dom {β' : Type _} {u : κ → UniformSpace β'} {F : ι → β' → α}
+ {k : κ} (hk : @UniformEquicontinuous _ _ _ _ (u k) F) :
+ @UniformEquicontinuous _ _ _ _ (⨅ k, u k) F := by
+ simp_rw [@uniformEquicontinuous_iff_uniformContinuous _ _ _ _ _] at hk ⊢
+ exact uniformContinuous_iInf_dom hk
+
-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
-- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
@@ -2,14 +2,11 @@
Copyright (c) 2022 Anatole Dedecker. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Anatole Dedecker
-
-! This file was ported from Lean 3 source module topology.uniform_space.equicontinuity
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.UniformSpace.UniformConvergenceTopology
+#align_import topology.uniform_space.equicontinuity from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
/-!
# Equicontinuity of a family of functions
fix-comments.py
on all files.@@ -371,7 +371,7 @@ theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α
/-- A version of `EquicontinuousAt.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
-embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
+embedding than continuity, but in practice this will mostly be applied to `FunLike` types where
the coercion is injective. -/
theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
(hA : EquicontinuousAt (u ∘ (↑) : A → X → α) x₀) (hu : Continuous u) :
@@ -54,12 +54,12 @@ Throughout this file, we use :
We choose to express equicontinuity as a properties of indexed families of functions rather
than sets of functions for the following reasons:
-- it is really easy to express equicontinuity of `H : set (X → α)` using our setup: it is just
+- it is really easy to express equicontinuity of `H : Set (X → α)` using our setup: it is just
equicontinuity of the family `(↑) : ↥H → (X → α)`. On the other hand, going the other way around
would require working with the range of the family, which is always annoying because it
introduces useless existentials.
- in most applications, one doesn't work with bare functions but with a more specific hom type
- `hom`. Equicontinuity of a set `H : set hom` would then have to be expressed as equicontinuity
+ `hom`. Equicontinuity of a set `H : Set hom` would then have to be expressed as equicontinuity
of `coe_fn '' H`, which is super annoying to work with. This is much simpler with families,
because equicontinuity of a family `𝓕 : ι → hom` would simply be expressed as equicontinuity
of `coe_fn ∘ 𝓕`, which doesn't introduce any nasty existentials.
@@ -86,9 +86,7 @@ equicontinuity, uniform convergence, ascoli
section
-open UniformSpace Filter Set
-
-open Uniformity Topology UniformConvergence
+open UniformSpace Filter Set Uniformity Topology UniformConvergence
variable {ι κ X Y Z α β γ 𝓕 : Type _} [TopologicalSpace X] [TopologicalSpace Y] [TopologicalSpace Z]
[UniformSpace α] [UniformSpace β] [UniformSpace γ]
@@ -100,7 +98,7 @@ def EquicontinuousAt (F : ι → X → α) (x₀ : X) : Prop :=
∀ U ∈ 𝓤 α, ∀ᶠ x in 𝓝 x₀, ∀ i, (F i x₀, F i x) ∈ U
#align equicontinuous_at EquicontinuousAt
-/-- We say that a set `H : set (X → α)` of functions is equicontinuous at a point if the family
+/-- We say that a set `H : Set (X → α)` of functions is equicontinuous at a point if the family
`(↑) : ↥H → (X → α)` is equicontinuous at that point. -/
protected abbrev Set.EquicontinuousAt (H : Set <| X → α) (x₀ : X) : Prop :=
EquicontinuousAt ((↑) : H → X → α) x₀
@@ -112,7 +110,7 @@ def Equicontinuous (F : ι → X → α) : Prop :=
∀ x₀, EquicontinuousAt F x₀
#align equicontinuous Equicontinuous
-/-- We say that a set `H : set (X → α)` of functions is equicontinuous if the family
+/-- We say that a set `H : Set (X → α)` of functions is equicontinuous if the family
`(↑) : ↥H → (X → α)` is equicontinuous. -/
protected abbrev Set.Equicontinuous (H : Set <| X → α) : Prop :=
Equicontinuous ((↑) : H → X → α)
@@ -125,7 +123,7 @@ def UniformEquicontinuous (F : ι → β → α) : Prop :=
∀ U ∈ 𝓤 α, ∀ᶠ xy : β × β in 𝓤 β, ∀ i, (F i xy.1, F i xy.2) ∈ U
#align uniform_equicontinuous UniformEquicontinuous
-/-- We say that a set `H : set (X → α)` of functions is uniformly equicontinuous if the family
+/-- We say that a set `H : Set (X → α)` of functions is uniformly equicontinuous if the family
`(↑) : ↥H → (X → α)` is uniformly equicontinuous. -/
protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
UniformEquicontinuous ((↑) : H → β → α)
@@ -220,8 +218,8 @@ protected theorem Set.UniformEquicontinuous.mono {H H' : Set <| β → α} (h :
i.e the family `(↑) : range F → X → α` is equicontinuous at `x₀`. -/
theorem equicontinuousAt_iff_range {F : ι → X → α} {x₀ : X} :
EquicontinuousAt F x₀ ↔ EquicontinuousAt ((↑) : range F → X → α) x₀ :=
- ⟨fun h => by rw [← comp_rangeSplitting F]; exact h.comp _, fun h =>
- h.comp (rangeFactorization F)⟩
+ ⟨fun h => by rw [← comp_rangeSplitting F]; exact h.comp _,
+ fun h => h.comp (rangeFactorization F)⟩
#align equicontinuous_at_iff_range equicontinuousAt_iff_range
/-- A family `𝓕 : ι → X → α` is equicontinuous iff `range 𝓕` is equicontinuous,
@@ -382,9 +380,7 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
rcases mem_uniformity_isClosed hU with ⟨V, hV, hVclosed, hVU⟩
filter_upwards [hA V hV]with x hx
rw [SetCoe.forall] at *
- have hx : A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V := hx
- -- Porting note: was
- -- change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
+ change A ⊆ (fun f => (u f x₀, u f x)) ⁻¹' V at hx
refine' (closure_minimal hx <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x₀).comp hu) ((continuous_apply x).comp hu)
#align equicontinuous_at.closure' EquicontinuousAt.closure'
@@ -407,7 +403,7 @@ theorem Filter.Tendsto.continuousAt_of_equicontinuousAt {l : Filter ι} [l.NeBot
/-- A version of `Equicontinuous.closure` applicable to subsets of types which embed continuously
into `X → α` with the product topology. It turns out we don't need any other condition on the
-embedding than continuity, but in practice this will mostly be applied to `fun_like` types where
+embedding than continuity, but in practice this will mostly be applied to `FunLike` types where
the coercion is injective. -/
theorem Equicontinuous.closure' {A : Set Y} {u : Y → X → α}
(hA : Equicontinuous (u ∘ (↑) : A → X → α)) (hu : Continuous u) :
@@ -429,7 +425,7 @@ theorem Filter.Tendsto.continuous_of_equicontinuous_at {l : Filter ι} [l.NeBot]
/-- A version of `UniformEquicontinuous.closure` applicable to subsets of types which embed
continuously into `β → α` with the product topology. It turns out we don't need any other condition
-on the embedding than continuity, but in practice this will mostly be applied to `fun_like` types
+on the embedding than continuity, but in practice this will mostly be applied to `FunLike` types
where the coercion is injective. -/
theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
(hA : UniformEquicontinuous (u ∘ (↑) : A → β → α)) (hu : Continuous u) :
@@ -439,9 +435,7 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
filter_upwards [hA V hV]
rintro ⟨x, y⟩ hxy
rw [SetCoe.forall] at *
- have hxy : A ⊆ (fun f => (u f x, u f y)) ⁻¹' V := hxy
- -- Porting note: was
- -- change A ⊆ (fun f => (u f x, u f y)) ⁻¹' V at hxy
+ change A ⊆ (fun f => (u f x, u f y)) ⁻¹' V at hxy
refine' (closure_minimal hxy <| hVclosed.preimage <| _).trans (preimage_mono hVU)
exact Continuous.prod_mk ((continuous_apply x).comp hu) ((continuous_apply y).comp hu)
#align uniform_equicontinuous.closure' UniformEquicontinuous.closure'
Also changed a few small things in Topology/UniformSpace/Equicontinuity
@@ -135,7 +135,7 @@ protected abbrev Set.UniformEquicontinuous (H : Set <| β → α) : Prop :=
only one with `x₀`. -/
theorem equicontinuousAt_iff_pair {F : ι → X → α} {x₀ : X} :
EquicontinuousAt F x₀ ↔
- ∀ U ∈ 𝓤 α, ∃ V ∈ 𝓝 x₀, ∀ (x) (_ : x ∈ V) (y) (_ : y ∈ V) (i), (F i x, F i y) ∈ U := by
+ ∀ U ∈ 𝓤 α, ∃ V ∈ 𝓝 x₀, ∀ x ∈ V, ∀ y ∈ V, ∀ i, (F i x, F i y) ∈ U := by
constructor <;> intro H U hU
· rcases comp_symm_mem_uniformity_sets hU with ⟨V, hV, hVsymm, hVU⟩
refine' ⟨_, H V hV, fun x hx y hy i => hVU (prod_mk_mem_compRel _ (hy i))⟩
@@ -272,9 +272,11 @@ theorem uniformEquicontinuous_iff_uniformContinuous {F : ι → β → α} :
rfl
#align uniform_equicontinuous_iff_uniform_continuous uniformEquicontinuous_iff_uniformContinuous
+-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
+-- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.equicontinuousAt_iff_left {κ : Type _} {p : κ → Prop} {s : κ → Set X}
{F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p s) :
- EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ (k : _)(_ : p k), ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U := by
+ EquicontinuousAt F x₀ ↔ ∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x ∈ s k, ∀ i, (F i x₀, F i x) ∈ U := by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
hX.tendsto_iff (UniformFun.hasBasis_nhds ι α _)]
simp only [Function.comp_apply, mem_setOf_eq, exists_prop]
@@ -289,21 +291,25 @@ theorem Filter.HasBasis.equicontinuousAt_iff_right {κ : Type _} {p : κ → Pro
rfl
#align filter.has_basis.equicontinuous_at_iff_right Filter.HasBasis.equicontinuousAt_iff_right
+-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
+-- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.equicontinuousAt_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop} {s₁ : κ₁ → Set X}
{p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → X → α} {x₀ : X} (hX : (𝓝 x₀).HasBasis p₁ s₁)
(hα : (𝓤 α).HasBasis p₂ s₂) :
EquicontinuousAt F x₀ ↔
- ∀ k₂, p₂ k₂ → ∃ (k₁ : _)(_ : p₁ k₁), ∀ x ∈ s₁ k₁, ∀ i, (F i x₀, F i x) ∈ s₂ k₂ := by
+ ∀ k₂, p₂ k₂ → ∃ k₁, p₁ k₁ ∧ ∀ x ∈ s₁ k₁, ∀ i, (F i x₀, F i x) ∈ s₂ k₂ := by
rw [equicontinuousAt_iff_continuousAt, ContinuousAt,
hX.tendsto_iff (UniformFun.hasBasis_nhds_of_basis ι α _ hα)]
simp only [Function.comp_apply, mem_setOf_eq, exists_prop]
rfl
#align filter.has_basis.equicontinuous_at_iff Filter.HasBasis.equicontinuousAt_iff
+-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
+-- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.uniformEquicontinuous_iff_left {κ : Type _} {p : κ → Prop}
{s : κ → Set (β × β)} {F : ι → β → α} (hβ : (𝓤 β).HasBasis p s) :
UniformEquicontinuous F ↔
- ∀ U ∈ 𝓤 α, ∃ (k : _)(_ : p k), ∀ x y, (x, y) ∈ s k → ∀ i, (F i x, F i y) ∈ U := by
+ ∀ U ∈ 𝓤 α, ∃ k, p k ∧ ∀ x y, (x, y) ∈ s k → ∀ i, (F i x, F i y) ∈ U := by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
hβ.tendsto_iff (UniformFun.hasBasis_uniformity ι α)]
simp only [Prod.forall, Function.comp_apply, mem_setOf_eq, exists_prop]
@@ -318,11 +324,13 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff_right {κ : Type _} {p : κ
rfl
#align filter.has_basis.uniform_equicontinuous_iff_right Filter.HasBasis.uniformEquicontinuous_iff_right
+-- Porting note: changed from `∃ k (_ : p k), _` to `∃ k, p k ∧ _` since Lean 4 generates the
+-- second one when parsing expressions like `∃ δ > 0, _`.
theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ : κ₁ → Prop}
{s₁ : κ₁ → Set (β × β)} {p₂ : κ₂ → Prop} {s₂ : κ₂ → Set (α × α)} {F : ι → β → α}
(hβ : (𝓤 β).HasBasis p₁ s₁) (hα : (𝓤 α).HasBasis p₂ s₂) :
UniformEquicontinuous F ↔
- ∀ k₂, p₂ k₂ → ∃ (k₁ : _)(_ : p₁ k₁), ∀ x y, (x, y) ∈ s₁ k₁ → ∀ i, (F i x, F i y) ∈ s₂ k₂ := by
+ ∀ k₂, p₂ k₂ → ∃ k₁, p₁ k₁ ∧ ∀ x y, (x, y) ∈ s₁ k₁ → ∀ i, (F i x, F i y) ∈ s₂ k₂ := by
rw [uniformEquicontinuous_iff_uniformContinuous, UniformContinuous,
hβ.tendsto_iff (UniformFun.hasBasis_uniformity_of_basis ι α hα)]
simp only [Prod.forall, Function.comp_apply, mem_setOf_eq, exists_prop]
@@ -334,7 +342,7 @@ theorem Filter.HasBasis.uniformEquicontinuous_iff {κ₁ κ₂ : Type _} {p₁ :
equicontinuous at `x₀`. -/
theorem UniformInducing.equicontinuousAt_iff {F : ι → X → α} {x₀ : X} {u : α → β}
(hu : UniformInducing u) : EquicontinuousAt F x₀ ↔ EquicontinuousAt ((· ∘ ·) u ∘ F) x₀ := by
- have := (@UniformFun.postcomp_uniformInducing ι _ _ _ _ _ hu).inducing
+ have := (UniformFun.postcomp_uniformInducing (α := ι) hu).inducing
rw [equicontinuousAt_iff_continuousAt, equicontinuousAt_iff_continuousAt, this.continuousAt_iff]
rfl
#align uniform_inducing.equicontinuous_at_iff UniformInducing.equicontinuousAt_iff
@@ -357,7 +365,7 @@ iff the family `𝓕'`, obtained by precomposing each function of `𝓕` by `u`,
equicontinuous. -/
theorem UniformInducing.uniformEquicontinuous_iff {F : ι → β → α} {u : α → γ}
(hu : UniformInducing u) : UniformEquicontinuous F ↔ UniformEquicontinuous ((· ∘ ·) u ∘ F) := by
- have := @UniformFun.postcomp_uniformInducing ι _ _ _ _ _ hu
+ have := UniformFun.postcomp_uniformInducing (α := ι) hu
rw [uniformEquicontinuous_iff_uniformContinuous, uniformEquicontinuous_iff_uniformContinuous,
this.uniformContinuous_iff]
rfl
@@ -385,7 +393,7 @@ theorem EquicontinuousAt.closure' {A : Set Y} {u : Y → X → α} {x₀ : X}
also equicontinuous at `x₀`. -/
theorem EquicontinuousAt.closure {A : Set <| X → α} {x₀ : X} (hA : A.EquicontinuousAt x₀) :
(closure A).EquicontinuousAt x₀ :=
- @EquicontinuousAt.closure' _ _ _ _ _ _ _ id _ hA continuous_id
+ EquicontinuousAt.closure' (u := id) hA continuous_id
#align equicontinuous_at.closure EquicontinuousAt.closure
/-- If `𝓕 : ι → X → α` tends to `f : X → α` *pointwise* along some nontrivial filter, and if the
@@ -442,7 +450,7 @@ theorem UniformEquicontinuous.closure' {A : Set Y} {u : Y → β → α}
uniformly equicontinuous. -/
theorem UniformEquicontinuous.closure {A : Set <| β → α} (hA : A.UniformEquicontinuous) :
(closure A).UniformEquicontinuous :=
- @UniformEquicontinuous.closure' _ _ _ _ _ _ _ id hA continuous_id
+ UniformEquicontinuous.closure' (u := id) hA continuous_id
#align uniform_equicontinuous.closure UniformEquicontinuous.closure
/-- If `𝓕 : ι → β → α` tends to `f : β → α` *pointwise* along some nontrivial filter, and if the
The unported dependencies are