Zulip Chat Archive

Stream: new members

Topic: Prove ContDiffOn by continuous derivative


Victor Liu (Jul 28 2024 at 22:37):

So I needed to prove the fact h'_cont_a_b, and when I added the assumption that h is continuously differentiable on Ω, the exact? tactic worked to prove it. However, now I am stuck with the problem of proving h_contDiffOn based on h'_clm being the derivative of h and being continuous. I can't seem to be able to find anything that works, and when I try apply? or exact? it says that it reached the maximum number of heartbeats.

Perhaps there is a better approach for this, or a proof for h'_contDiffOn would also work. Thanks in advance.

import Mathlib.Analysis.Calculus.ContDiff.Defs

open Set Topology Metric ContinuousLinearMap

section NewtonKantorovich1Constant

-- Define the variables for Banach spaces X and Y
variable {X Y : Type*}
  [NormedAddCommGroup X] [NormedSpace  X] [CompleteSpace X]
  [NormedAddCommGroup Y] [NormedSpace  Y] [CompleteSpace Y]
variable [Nontrivial X] [Nontrivial Y]
-- Define the open subset Ω of X
variable (Ω : Set X) ( : IsOpen Ω)
-- Define the C¹ mapping f: Ω → Y
variable (f : X  Y) (hf : ContDiffOn  1 f Ω)
-- Define f' as a mapping
variable (f' : X  X L[] Y)
         (hf' :  x  Ω, HasFDerivAt f (f' x : X L[] Y) x)
variable (a b : X) (hab :  t, t  Icc (0 : ) 1  (a + t  (b - a))  Ω)

noncomputable def f'_clm : X  X L[] Y := fun x  (f' x).toContinuousLinearMap

lemma f'_clm_continuous {Ω : Set X}  {f : X  Y}
    {f' : X  X L[] Y}
    ( : IsOpen Ω) (hf : ContDiffOn  1 f Ω)
    (hf' :  x  Ω, HasFDerivAt f (f' x : X L[] Y) x) :
    ContinuousOn (f'_clm f') Ω := by
  have h_fderiv_cont : ContinuousOn (fun x  fderiv  f x) Ω := by
    apply ContDiffOn.continuousOn_fderiv_of_isOpen hf 
    norm_num
  apply ContinuousOn.congr h_fderiv_cont
  intro x hx
  simp [f'_clm]
  exact Eq.symm (HasFDerivAt.fderiv (hf' x hx))

lemma f'_cont_a_b :
    ContinuousOn (fun t :  
      (f' (a + t  (b - a)) : X L[] Y)) (Icc 0 1) := by
  have h_comp : ContinuousOn (f'_clm f'  γ a b) (Icc 0 1):= by
    apply ContinuousOn.comp
    · exact f'_clm_continuous  hf hf'
    · intro t _
      exact γ_continuous a b t
    · exact hab
  exact h_comp

-- Auxiliary function h
noncomputable def h (x : X) : X := (f' x₀).symm (f x)
noncomputable def h' (x : X) : X L[] X := (f' x).trans (f' x₀).symm
noncomputable def h'_clm : X  X L[] X := fun x  (h' x₀ f' x).toContinuousLinearMap

lemma h'_deriv :  x  Ω, HasFDerivAt (h x₀ f f') (h'_clm x₀ f' x) x := by
  intro x hx
  -- Step 1: Express h as a composition
  have h_comp : h x₀ f f' = (f' x₀).symm  f := rfl
  have h'_comp : h'_clm x₀ f' x = ((f' x₀).symm : Y L[] X).comp (f' x : X L[] Y) := rfl
  rw [h_comp, h'_comp]
  exact (ContinuousLinearEquiv.comp_hasFDerivAt_iff (f' x₀).symm).mpr (hf' x hx)

lemma h'_eq_deriv :  x  Ω, h' x₀ f' x = fderiv  (h x₀ f f') x := by
  exact fun x a  Eq.symm (HasFDerivAt.fderiv ((h'_deriv Ω x₀ f f' hf') x a))

lemma h'_cont :  x  Ω, ContinuousOn (h'_clm x₀ f' x) Ω := by fun_prop

lemma h_contDiffOn : ContDiffOn  1 (h x₀ f f') Ω := by
  have h'_deriv := h'_deriv Ω x₀ f f' hf'
  apply?

lemma h'_cont_a_b {Ω : Set X} {x₀ a b : X} {f : X  Y} {f' : X  X L[] Y}
    (hab :  t, t  Icc (0 : ) 1  (a + t  (b - a))  Ω)
    ( : IsOpen Ω)
    (hh : ContDiffOn  1 (h x₀ f f') Ω)
    (hh' :  x  Ω, HasFDerivAt (h x₀ f f') (h' x₀ f' x : X L[] X) x) :
    ContinuousOn (fun t :  
      ((h' x₀ f') (a + t  (b - a)) : X L[] X)) (Icc 0 1) := by
  exact f'_cont_a_b Ω  (h x₀ f f') hh (h' x₀ f') hh' a b hab

-- This could be useful for a different approach:

-- Define the parameteric path γ from a to b
def γ (a b : X) :   X := fun t  a + t  (b - a)

lemma γ_continuous (a b : X) (t : ) : ContinuousWithinAt (γ a b) (Icc 0 1) t := by
  apply ContinuousWithinAt.add
  · exact continuousWithinAt_const
  · apply ContinuousWithinAt.smul
    · exact continuousWithinAt_id
    · exact continuousWithinAt_const

Last updated: May 02 2025 at 03:31 UTC