Skip to main content
AlexKontorovich/PrimeNumberTheoremAnd
Source indexedlemma · leanprover/lean4:v4.32.0

pv_rewrite

PrimeNumberTheoremAnd.IEANTN.PVIdentity · PrimeNumberTheoremAnd/IEANTN/PVIdentity.lean:403 to 435

Mathematical statement

Exact Lean statement

lemma pv_rewrite {y ε : ℝ} (hy : 0 < y) (hε : 0 < ε) (hε1 : ε < 1) (hεy : ε < y) :
    (∫ u in (-1/ε)..(-ε), exp u / u) + (∫ u in ε..y, exp u / u) =
    (∫ t in ε..1, (1 - exp (-t)) / t) - (∫ t in (1:ℝ)..(1/ε), exp (-t) / t) +
    (∫ u in ε..y, (exp u - 1) / u) + log y

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma pv_rewrite {y ε : } (hy : 0 < y) (hε : 0 < ε) (hε1 : ε < 1) (hεy : ε < y) :    (∫ u in (-1/ε)..(-ε), exp u / u) + (∫ u in ε..y, exp u / u) =    (∫ t in ε..1, (1 - exp (-t)) / t) - (∫ t in (1:)..(1/ε), exp (-t) / t) +    (∫ u in ε..y, (exp u - 1) / u) + log y := by  -- Use the results from the lemmas to rewrite the integrals.  have h1 : ∫ u in (-1 / ε)..(-ε), Real.exp u / u = -(∫ t in ε..1 / ε, Real.exp (-t) / t) := by    exact integral_exp_div_neg_eq hε  have h2 : ∫ u in ε..y, Real.exp u / u = (∫ v in ε..y, ((Real.exp v) - 1) / v) + Real.log y - Real.log ε := by    rw [ intervalIntegral.integral_eq_sub_of_hasDerivAt ];    rotate_right;    use fun x => ∫ u in ε..x, ( Real.exp u - 1 ) / u + 1 / u;    · rw [ intervalIntegral.integral_add ] <;> norm_num [ hε, hεy.le ];      · rw [ Real.log_div ] <;> linarith;      · apply_rules [ ContinuousOn.intervalIntegrable ];        exact continuousOn_of_forall_continuousAt fun u hu => ContinuousAt.div ( ContinuousAt.sub ( Real.continuous_exp.continuousAt ) continuousAt_const ) continuousAt_id ( by cases Set.mem_uIcc.mp hu <;> linarith );      · exact ContinuousOn.intervalIntegrable ( by exact continuousOn_of_forall_continuousAt fun x hx => ContinuousAt.div continuousAt_const continuousAt_id <| by linarith [ Set.mem_Icc.mp <| by simpa [ hε.le, hεy.le ] using hx ] ) ..;    · intro x hx; convert HasDerivAt.congr_of_eventuallyEq _ ?_ using 1;      use fun x => ∫ u in ε..x, Real.exp u / u;      · apply_rules [ intervalIntegral.integral_hasDerivAt_right ];        · apply_rules [ ContinuousOn.intervalIntegrable ];          exact continuousOn_of_forall_continuousAt fun u hu => ContinuousAt.div ( Real.continuous_exp.continuousAt ) continuousAt_id ( by cases Set.mem_uIcc.mp hu <;> cases Set.mem_uIcc.mp hx <;> linarith );        · exact Measurable.stronglyMeasurable ( by exact Measurable.mul ( Real.continuous_exp.measurable ) ( measurable_id.inv ) ) |> fun h => h.stronglyMeasurableAtFilter;        · exact ContinuousAt.div ( Real.continuous_exp.continuousAt ) continuousAt_id ( by cases Set.mem_uIcc.mp hx <;> linarith );      · filter_upwards [ lt_mem_nhds ( show x > 0 by cases Set.mem_uIcc.mp hx <;> linarith ) ] with u hu using by refine' intervalIntegral.integral_congr fun v hv => _ ; rw [ sub_div, sub_add_cancel ] ;    · apply_rules [ ContinuousOn.intervalIntegrable ];      exact continuousOn_of_forall_continuousAt fun u hu => ContinuousAt.div ( Real.continuous_exp.continuousAt ) continuousAt_id ( by cases Set.mem_uIcc.mp hu <;> linarith );  rw [ h1, h2 ] ; ring_nf;  rw [ intervalIntegral.integral_add ] <;> norm_num ; ring_nf;  · rw [ integral_inv_of_pos, show ( ∫ u in ( ε :  )..ε⁻¹, Real.exp ( -u ) * u⁻¹ ) = ( ∫ u in ( ε :  )..1, Real.exp ( -u ) * u⁻¹ ) + ( ∫ u in ( 1 :  )..ε⁻¹, Real.exp ( -u ) * u⁻¹ ) from ?_ ] <;> norm_num [ hε, hε1, hεy ] ; ring;    rw [ intervalIntegral.integral_add_adjacent_intervals ] <;> apply_rules [ ContinuousOn.intervalIntegrable ] <;> exact continuousOn_of_forall_continuousAt fun u hu => ContinuousAt.mul ( ContinuousAt.rexp <| ContinuousAt.neg <| continuousAt_id ) <| ContinuousAt.inv₀ continuousAt_id <| by cases Set.mem_uIcc.mp hu <;> nlinarith [ inv_mul_cancel₀ hε.ne' ] ;  · apply_rules [ ContinuousOn.intervalIntegrable ];    exact continuousOn_of_forall_continuousAt fun t ht => ContinuousAt.neg ( ContinuousAt.mul ( Real.continuous_exp.continuousAt.comp <| ContinuousAt.neg continuousAt_id ) <| ContinuousAt.inv₀ continuousAt_id <| by cases Set.mem_uIcc.mp ht <;> linarith );  · exact Or.inr <| Set.notMem_uIcc_of_lt hε zero_lt_one