Full source
/-- Let `E` and `F` be two topological vector spaces over a `NontriviallyNormedField`, and assume
that the topology of `F` is generated by some family of seminorms `q`. For a family `f` of linear
maps from `E` to `F`, the following are equivalent:
* `f` is equicontinuous at `0`.
* `f` is equicontinuous.
* `f` is uniformly equicontinuous.
* For each `q i`, the family of seminorms `k β¦ (q i) β (f k)` is bounded by some continuous
seminorm `p` on `E`.
* For each `q i`, the seminorm `β k, (q i) β (f k)` is well-defined and continuous.
In particular, if you can determine all continuous seminorms on `E`, that gives you a complete
characterization of equicontinuity for linear maps from `E` to `F`. For example `E` and `F` are
both normed spaces, you get `NormedSpace.equicontinuous_TFAE`. -/
protected theorem _root_.WithSeminorms.equicontinuous_TFAE {ΞΊ : Type*}
{q : SeminormFamily πβ F ΞΉ'} [UniformSpace E] [IsUniformAddGroup E] [u : UniformSpace F]
[hu : IsUniformAddGroup F] (hq : WithSeminorms q) [ContinuousSMul π E]
(f : ΞΊ β E βββ[Οββ] F) : TFAE
[ EquicontinuousAt ((β) β f) 0,
Equicontinuous ((β) β f),
UniformEquicontinuous ((β) β f),
β i, β p : Seminorm π E, Continuous p β§ β k, (q i).comp (f k) β€ p,
β i, BddAbove (range fun k β¦ (q i).comp (f k)) β§ Continuous (β¨ k, (q i).comp (f k)) ] := by
-- We start by reducing to the case where the target is a seminormed space
rw [q.withSeminorms_iff_uniformSpace_eq_iInf.mp hq, uniformEquicontinuous_iInf_rng,
equicontinuous_iInf_rng, equicontinuousAt_iInf_rng]
refine forall_tfae [_, _, _, _, _] fun i β¦ ?_
let _ : SeminormedAddCommGroup F := (q i).toSeminormedAddCommGroup
clear u hu hq
-- Now we can prove the equivalence in this setting
simp only [List.map]
tfae_have 1 β 3 := uniformEquicontinuous_of_equicontinuousAt_zero f
tfae_have 3 β 2 := UniformEquicontinuous.equicontinuous
tfae_have 2 β 1 := fun H β¦ H 0
tfae_have 3 β 5
| H => by
have : βαΆ x in π 0, β k, q i (f k x) β€ 1 := by
filter_upwards [Metric.equicontinuousAt_iff_right.mp (H.equicontinuous 0) 1 one_pos]
with x hx k
simpa using (hx k).le
have bdd : BddAbove (range fun k β¦ (q i).comp (f k)) :=
Seminorm.bddAbove_of_absorbent (absorbent_nhds_zero this)
(fun x hx β¦ β¨1, forall_mem_range.mpr hxβ©)
rw [β Seminorm.coe_iSup_eq bdd]
refine β¨bdd, Seminorm.continuous' (r := 1) ?_β©
filter_upwards [this] with x hx
simpa only [closedBall_iSup bdd _ one_pos, mem_iInter, mem_closedBall_zero] using hx
tfae_have 5 β 4 := fun H β¦ β¨β¨ k, (q i).comp (f k), Seminorm.coe_iSup_eq H.1 βΈ H.2, le_ciSup H.1β©
tfae_have 4 β 1 -- This would work over any `NormedField`
| β¨p, hp, hfpβ© =>
Metric.equicontinuousAt_of_continuity_modulus p (map_zero p βΈ hp.tendsto 0) _ <|
Eventually.of_forall fun x k β¦ by simpa using hfp k x
tfae_finish