Zulip Chat Archive

Stream: Is there code for X?

Topic: pulling continuity past integrals


Alex Kontorovich (Jan 02 2024 at 22:14):

Here's a funny situation. I have a continuous function ff on , and I want to know that, as wzw \to z, the vertical integral of ff from (z)\Im(z) to (w)\Im(w) having real part (w)\Re(w) differs from the same having real part (z)\Re(z) by o(wz)o(w-z). Basically, the integral should be bounded by wzw-z times the difference of the functions inside, but the difference is going to zero too...? Is there a simple way to combine the two limits? Thanks!

example {f :   } (hf : Continuous f) {z : } :
  (fun (w : ) => ( (y : ) in z.im..w.im, f (w.re + y * I))
    -  (y : ) in z.im..w.im, f (z.re + y * I))
    =o[𝓝 z] fun w => w - z := by
  sorry

Terence Tao (Jan 02 2024 at 23:08):

You can subtract f z from both integrands and now you are integrating things of size o(1)o(1) on integrals of length O(wz)O(|w-z|), so simple estimates would suffice here.

Alex Kontorovich (Jan 02 2024 at 23:44):

Interesting suggestion. I was instead thinking that it'd be easier to start by putting the two integrals together into ∫ (y : ℝ) in z.im..w.im, f (w.re + y * I) - f (z.re + y * I). Either way, it's that last part that I wanted help with.

Here's perhaps an even simpler setting that would already point me in the right direction: Say f=o(1)f=o(1) as w0w\to0; is there a simple way of showing that this integral is o(w)o(w)?

import Mathlib

open Topology

example {f :   } (hf : Continuous f) (hf0 : f =o[𝓝 0] (1 :   )) :
    (fun (w : )   (y : ) in (0:)..w.im, f (w.re + y * I)) =o[𝓝 0] fun w => w := by
  sorry

Alex Kontorovich (Jan 02 2024 at 23:48):

I can do it if I resort to epsilons and deltas. I'm trying to see whether there is a "right" Mathlib-y way to do this...?

Alex Kontorovich (Jan 03 2024 at 00:12):

Let me try to be even more precise about where I'm stuck. How do I prove KeyFact below?

import Mathlib

open Topology

example {f :   } (hf : Continuous f) (hf0 : f =o[𝓝 0] (1 :   )) :
    (fun (w : )   (y : ) in (0:)..w.im, f (w.re + y * I)) =o[𝓝 0] fun w => w := by
  rw [Asymptotics.IsLittleO] at hf0 
  intro c c_pos
  have := hf0 c_pos
  rw [Asymptotics.isBigOWith_iff] at this 
  simp only [Complex.norm_eq_abs, Pi.one_apply, norm_one, mul_one] at this
  filter_upwards [this]
  intro w hw
  have KeyFact :  y > 0, y < w.im  Complex.abs (f (w.re + y * I))  c := sorry -- this is what I want!
  calc
    _  ‖∫ (y : ) in (0 : )..w.im, c := ?_
    _  c * w := ?_
  · sorry
  · simp only [intervalIntegral.integral_const, sub_zero, smul_eq_mul, norm_mul, Real.norm_eq_abs,
    Complex.norm_eq_abs]
    sorry

Alex Kontorovich (Jan 03 2024 at 00:13):

I'm using filter_upwards in the wrong way, but I don't know what the right way is...

Terence Tao (Jan 03 2024 at 04:03):

Honestly I would just epsilon-and-delta this claim rather than try to mess around with filters. (Filter_upwards is only useful when you only need finitely many points to lie in some suitable neighbourhood, but you want an entire interval, and so you may as as well first get a ball in the neighbourhood and then fit the interval inside the ball.)

Terence Tao (Jan 03 2024 at 04:10):

One can also get what you want from dominated convergence (and that continuous functions are bounded on compacta), after using an affine change of variables to keep the domain of integration a fixed interval, but this is using a sledgehammer to swat a fly. Or you could restrict to a compact set to make the function uniformly continuous and then invoke a modulus of continuity using e.g., docs#ContinuousMap.dist_lt_of_dist_lt_modulus , but again this is overkill.

Patrick Massot (Jan 03 2024 at 17:52):

I got nerd-snipped by the claim that epsilon-delta are better than filters here. I initially wanted to disprove this, but indeed in this situation I think that proving an abstract filter version wouldn't beat the elementary proof using the specific geometry of the situation. What I call the geometry of the situation is the claim that

rR,wC,wBr(0)    yR,y[0,w]    w+iyBr(0).\forall r \in \R, \forall w \in \mathbb C, w \in B_r(0) \implies \forall y \in \mathbb R, y \in [0, \Im w] \implies \Re w + iy \in B_r(0).

Clearly this geometrical fact isn't essential, but it does make the proof easier. However I couldn't find some lemmas that I wanted to use this geometry. So I came up with

import Mathlib

open Topology Complex

lemma le_iff_sq_le {R : Type*} [LinearOrderedRing R] {x y : R} (hx : 0  x) (hy : 0  y) :
    x  y  x^2  y^2 := by
  rw [sq_le_sq, _root_.abs_of_nonneg hx, _root_.abs_of_nonneg hy]

lemma abs_le_of_mem_uIoc_zero {A : Type*} [LinearOrderedAddCommGroup A] {x y : A} (h : x  Ι 0 y) :
    |x|  |y| := by
  rcases Set.mem_uIoc.1 h with (⟨hx, hxy | hxy, hx⟩)
  · rwa [abs_of_pos hx, abs_of_pos <| hx.trans_le hxy]
  · rw [abs_of_nonpos hx, abs_of_neg <| hxy.trans_le hx]
    exact neg_le_neg hxy.le

lemma sq_le_of_mem_uIoc_zero {R : Type*} [LinearOrderedRing R] {x y : R} (h : x  Ι 0 y) :
    x^2  y^2 := by
  simpa using pow_le_pow_left (abs_nonneg x) (abs_le_of_mem_uIoc_zero h) 2

example {f :   } (hf0 : f =o[𝓝 0] (1 :   )) :
    (fun (w : )   (y : ) in (0:)..w.im, f (w.re + y * I)) =o[𝓝 0] fun w  w := by
  rw [Asymptotics.IsLittleO] at hf0 
  intro c c_pos
  have := hf0 c_pos
  simp only [Asymptotics.isBigOWith_iff,Pi.one_apply, norm_one, mul_one ] at this 
  have : ∀ᶠ (w : ) in 𝓝 0,  y  Ι 0 w.im, f (w.re + y * I)  c := by
    rw [Metric.nhds_basis_closedBall.eventually_iff] at this 
    peel this with  ε ε_pos
    intro w hw y hy
    apply 
    rw [mem_closedBall_zero_iff, le_iff_sq_le, IsROrC.norm_sq_eq_def,  pow_two,  pow_two] at *
    suffices w.re^2 + y ^2  ε ^ 2 by simpa
    calc w.re^2 + y^2  w.re^2 + w.im^2 := by gcongr w.re^2 + ?_; exact sq_le_of_mem_uIoc_zero hy
     _                 ε ^ 2  := by simpa using hw
    all_goals positivity
  exact this.mono fun w hw  calc
    _  c * |w.im - 0|  := intervalIntegral.norm_integral_le_of_norm_le_const hw
    _  c * w := by gcongr; simp [w.abs_im_le_abs]

Patrick Massot (Jan 03 2024 at 17:54):

I think it isn't the first time I don't manage to find the first lemma above. Is it really missing?

Johan Commelin (Jan 03 2024 at 17:55):

Is there an auto-implicit ww in your math-display above?

Patrick Massot (Jan 03 2024 at 17:57):

No, it was a notation change in the middle.

Johan Commelin (Jan 03 2024 at 17:57):

Makes sense (-; My unusedVariable linter should have told me so.

Patrick Massot (Jan 03 2024 at 18:07):

I moved messages about the stupid ordered remiring lemma to clarify.

Patrick Massot (Jan 03 2024 at 18:07):

Returning to the main topic, notice the title of this thread is not very accurate since I removed the useless continuity assumption.

Terence Tao (Jan 05 2024 at 02:57):

If one really wants to avoid epsilon/delta, another way to proceed is to encode the geometric fact isolated by Patrick as the claim that the function tRew+itImw t \mapsto \mathrm{Re} w + i t \mathrm{Im} w converges in t[0,1]t \in [0,1] uniformly to zero as ww0w \to w_0, and then to have a general lemma that if f(z)f(z) converges to LL as zz0z \to z_0, and tg(w,t)t \mapsto g(w,t) converges uniformly in tt to tz0t \mapsto z_0, then tf(g(w,t))t \mapsto f(g(w,t)) converges uniformly in tt to LL as ww0w \to w_0. (One can phrase this in terms of product filters, the uniform filter, and filter maps if desired.)


Last updated: May 02 2025 at 03:31 UTC