Skip to main content
fpvandoorn/carleson
Source indexedtheorem Β· leanprover/lean4:v4.32.0

RCLike.induction

Carleson.ToMathlib.Analysis.RCLike.Components Β· Carleson/ToMathlib/Analysis/RCLike/Components.lean:217 to 301

Mathematical statement

Exact Lean statement

theorem induction {Ξ± : Type*} {𝕂 : Type*} [RCLike 𝕂]
  {Ξ² : Type*} [Mul Ξ²] {a b}
  {P : (Ξ± β†’ 𝕂) β†’ Prop}
  (P_add : βˆ€ {f g : Ξ± β†’ 𝕂}, P f β†’ P g β†’ P (f + g))
  (P_components : βˆ€ {f : Ξ± β†’ 𝕂} {c : 𝕂} (_ : c ∈ RCLike.Components),
    P f β†’ P (algebraMap ℝ 𝕂 ∘ NNReal.toReal ∘ RCLike.component c ∘ f))
  (P_mul_unit : βˆ€ {f : Ξ± β†’ 𝕂} {c : 𝕂} (_ : c ∈ RCLike.Components), P f β†’ P (c β€’ f))
  {motive : (Ξ± β†’ 𝕂) β†’ Ξ² β†’ Prop}
  (motive_nnreal : βˆ€ {f : Ξ± β†’ ℝβ‰₯0} (_ : P (algebraMap ℝ 𝕂 ∘ NNReal.toReal ∘ f)),
    motive (algebraMap ℝ 𝕂 ∘ NNReal.toReal ∘ f) a)
  (motive_add' : βˆ€ {n : Ξ²} {f g : Ξ± β†’ 𝕂} (_ : βˆ€ {x}, β€–f xβ€– ≀ β€–f x + g xβ€–)
    (_ : βˆ€ {x}, β€–g xβ€– ≀ β€–f x + g xβ€–) (_ : P f) (_ : P g),
      motive f n β†’ motive g n β†’ motive (f + g) (n * b))
  (motive_mul_unit : βˆ€ {f : Ξ± β†’ 𝕂} {c : 𝕂} {n : Ξ²} (_ : c ∈ RCLike.Components) (_ : P f),
    motive f n β†’ motive (c β€’ f) n)
  ⦃f : Ξ± β†’ 𝕂⦄ (hf : P f) :
    motive f (a * b * b)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem induction {Ξ± : Type*} {𝕂 : Type*} [RCLike 𝕂]  {Ξ² : Type*} [Mul Ξ²] {a b}  {P : (Ξ± β†’ 𝕂) β†’ Prop}  (P_add : βˆ€ {f g : Ξ± β†’ 𝕂}, P f β†’ P g β†’ P (f + g))  (P_components : βˆ€ {f : Ξ± β†’ 𝕂} {c : 𝕂} (_ : c ∈ RCLike.Components),    P f β†’ P (algebraMap ℝ 𝕂 ∘ NNReal.toReal ∘ RCLike.component c ∘ f))  (P_mul_unit : βˆ€ {f : Ξ± β†’ 𝕂} {c : 𝕂} (_ : c ∈ RCLike.Components), P f β†’ P (c β€’ f))  {motive : (Ξ± β†’ 𝕂) β†’ Ξ² β†’ Prop}  (motive_nnreal : βˆ€ {f : Ξ± β†’ ℝβ‰₯0} (_ : P (algebraMap ℝ 𝕂 ∘ NNReal.toReal ∘ f)),    motive (algebraMap ℝ 𝕂 ∘ NNReal.toReal ∘ f) a)  (motive_add' : βˆ€ {n : Ξ²} {f g : Ξ± β†’ 𝕂} (_ : βˆ€ {x}, β€–f xβ€– ≀ β€–f x + g xβ€–)    (_ : βˆ€ {x}, β€–g xβ€– ≀ β€–f x + g xβ€–) (_ : P f) (_ : P g),      motive f n β†’ motive g n β†’ motive (f + g) (n * b))  (motive_mul_unit : βˆ€ {f : Ξ± β†’ 𝕂} {c : 𝕂} {n : Ξ²} (_ : c ∈ RCLike.Components) (_ : P f),    motive f n β†’ motive (c β€’ f) n)  ⦃f : Ξ± β†’ 𝕂⦄ (hf : P f) :    motive f (a * b * b) := by  have f_decomposition :    (1 : 𝕂) β€’ ((algebraMap ℝ 𝕂) ∘ toReal ∘ component 1 ∘ f)    + (-1 : 𝕂) β€’ ((algebraMap ℝ 𝕂) ∘ toReal ∘ component (-1) ∘ f)    + (RCLike.I : 𝕂) β€’ ((algebraMap ℝ 𝕂) ∘ toReal ∘ component RCLike.I ∘ f)    + (-RCLike.I : 𝕂) β€’ ((algebraMap ℝ 𝕂) ∘ toReal ∘ component (-RCLike.I) ∘ f) = f := by    ext x    simp only [Pi.add_apply, Function.comp_apply, Pi.smul_apply, smul_eq_mul]    exact RCLike.decomposition  -- Decompose f into real and imaginary parts, each further split into positive/negative parts  rw [← f_decomposition, add_assoc]  have hP_comp : βˆ€ {c : 𝕂} (_ : c ∈ Components),      P (c β€’ ((algebraMap ℝ 𝕂) ∘ toReal ∘ component c ∘ f)) := fun hc =>    P_mul_unit hc (P_components hc hf)  -- Pointwise version of the decomposition  have f_decomp_pt : βˆ€ x, (algebraMap ℝ 𝕂) ((component 1 (f x)).toReal)      + (-1) * (algebraMap ℝ 𝕂) ((component (-1) (f x)).toReal)      + (RCLike.I * (algebraMap ℝ 𝕂) ((component RCLike.I (f x)).toReal)        + -RCLike.I * (algebraMap ℝ 𝕂) ((component (-RCLike.I) (f x)).toReal)) = f x := by    intro x    have := congr_fun f_decomposition x    simp only [Pi.add_apply, Function.comp_apply, Pi.smul_apply, smul_eq_mul, one_mul] at this    rw [add_assoc] at this; exact this  -- Outer split: real part vs imaginary part  apply motive_add'  Β· -- β€–real_part xβ€– ≀ β€–(real_part + imag_part) xβ€–    intro x    simp only [Pi.add_apply, Function.comp_apply, Pi.smul_apply, smul_eq_mul, one_mul]    rw [f_decomp_pt]    exact norm_realPart_le (f x)  Β· -- β€–imag_part xβ€– ≀ β€–(real_part + imag_part) xβ€–    intro x    simp only [Pi.add_apply, Function.comp_apply, Pi.smul_apply, smul_eq_mul, one_mul]    rw [f_decomp_pt]    exact norm_imPart_le (f x)  Β· exact P_add (hP_comp (by unfold Components; simp)) (hP_comp (by unfold Components; simp))  Β· exact P_add (hP_comp (by unfold Components; simp)) (hP_comp (by unfold Components; simp))  Β· -- Inner split: positive real vs negative real    apply motive_add'    Β· -- β€–1 * pos_re xβ€– ≀ β€–(1 * pos_re + (-1) * neg_re) xβ€–      intro x      simp only [Function.comp_apply, Pi.smul_apply, smul_eq_mul, one_mul]      exact norm_posReal_le (f x)    Β· -- β€–(-1) * neg_re xβ€– ≀ β€–(1 * pos_re + (-1) * neg_re) xβ€–      intro x      simp only [Function.comp_apply, Pi.smul_apply, smul_eq_mul, one_mul]      exact norm_negReal_le (f x)    Β· exact hP_comp (by unfold Components; simp)    Β· exact hP_comp (by unfold Components; simp)    Β· exact motive_mul_unit (by unfold Components; simp) (P_components (by unfold Components; simp) hf)        (motive_nnreal (P_components (by unfold Components; simp) hf))    Β· exact motive_mul_unit (by unfold Components; simp) (P_components (by unfold Components; simp) hf)        (motive_nnreal (P_components (by unfold Components; simp) hf))  Β· -- Inner split: positive imaginary vs negative imaginary    apply motive_add'    Β· -- β€–I * pos_im xβ€– ≀ β€–(I * pos_im + (-I) * neg_im) xβ€–      intro x      simp only [Function.comp_apply, Pi.smul_apply, smul_eq_mul]      exact norm_posIm_le (f x)    Β· -- β€–(-I) * neg_im xβ€– ≀ β€–(I * pos_im + (-I) * neg_im) xβ€–      intro x      simp only [Function.comp_apply, Pi.smul_apply, smul_eq_mul]      exact norm_negIm_le (f x)    Β· exact hP_comp (by unfold Components; simp)    Β· exact hP_comp (by unfold Components; simp)    Β· exact motive_mul_unit (by unfold Components; simp) (P_components (by unfold Components; simp) hf)        (motive_nnreal (P_components (by unfold Components; simp) hf))    Β· exact motive_mul_unit (by unfold Components; simp) (P_components (by unfold Components; simp) hf)        (motive_nnreal (P_components (by unfold Components; simp) hf))