Zulip Chat Archive

Stream: new members

Topic: Holomorphic functions are analytic


Vincent Beffara (May 16 2022 at 11:52):

There are removable singularities, but I did not find this basic result in mathlib:

import analysis.analytic.basic
import analysis.calculus.fderiv
import analysis.complex.removable_singularity

variables {U : set } {f :   }

open filter

lemma analytic_at_of_differentiable_on (U_open : is_open U) (f_diff : differentiable_on  f U)
  z :  (hz : z  U) : analytic_at  f z :=
begin
  apply complex.analytic_at_of_differentiable_on_punctured_nhds_of_continuous_at,
  { refine ⟨{z :  | differentiable_at  f z}, _, set.univ, univ_mem, (set.inter_univ _).symm⟩,
    refine mem_of_superset (U_open.mem_nhds_iff.mpr hz) _,
    exact λ w hw, f_diff.differentiable_at (U_open.mem_nhds_iff.mpr hw) },
  { exact f_diff.continuous_on.continuous_at (U_open.mem_nhds_iff.mpr hz) }
end

I'm kind of happy with the statement, but the style of the proof (especially the middle 3 lines) feels like the atrocious attempt at hammering through filters. What is the right way to write this proof? I.e., if a property holds in an open set, it holds on a punctured neighborhood of any point in the set.

Vincent Beffara (May 16 2022 at 12:01):

Ah, I knew I should have asked earlier ...

import analysis.analytic.basic
import analysis.calculus.fderiv
import analysis.complex.removable_singularity

variables {U : set } {f :   }

open filter

lemma analytic_at_of_differentiable_on (U_open : is_open U) (f_diff : differentiable_on  f U)
  z :  (hz : z  U) : analytic_at  f z :=
begin
  apply complex.analytic_at_of_differentiable_on_punctured_nhds_of_continuous_at,
  { apply eventually.filter_mono nhds_within_le_nhds,
    apply eventually_of_mem (U_open.mem_nhds_iff.mpr hz),
    exact λ w hw, f_diff.differentiable_at (U_open.mem_nhds_iff.mpr hw) },
  { exact f_diff.continuous_on.continuous_at (U_open.mem_nhds_iff.mpr hz) }
end

This feels a little bit better. Am I on the right track?

Anatole Dedecker (May 16 2022 at 12:08):

I think you're trying to use too strong theorems, did you see docs#differentiable_on.analytic_at ?

Vincent Beffara (May 16 2022 at 12:10):

Ah indeed I had missed it, not sure how :face_palm:

Anatole Dedecker (May 16 2022 at 12:13):

Then you can do

import analysis.complex.cauchy_integral

variables {U : set } {f :   }

open filter

lemma analytic_at_of_differentiable_on (U_open : is_open U) (f_diff : differentiable_on  f U)
  z :  (hz : z  U) : analytic_at  f z :=
f_diff.analytic_at (U_open.mem_nhds hz)

Patrick Massot (May 16 2022 at 15:46):

Anatole's answer is of course the right one, but the question of how to avoid fighting against filters is still valid, so let me write:

import analysis.analytic.basic
import analysis.calculus.fderiv
import analysis.complex.removable_singularity

variables {U : set } {f :   }

open filter

lemma analytic_at_of_differentiable_on (U_open : is_open U) (f_diff : differentiable_on  f U)
  z :  (hz : z  U) : analytic_at  f z :=
begin
  apply complex.analytic_at_of_differentiable_on_punctured_nhds_of_continuous_at,
  { apply eventually_nhds_within_of_eventually_nhds,
    exact f_diff.eventually_differentiable_at (U_open.mem_nhds hz) },
  { exact f_diff.continuous_on.continuous_at (U_open.mem_nhds_iff.mpr hz) }
end

Last updated: Dec 20 2023 at 11:08 UTC