Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 10 additions & 20 deletions Mathlib/Analysis/Analytic/Within.lean
Original file line number Diff line number Diff line change
Expand Up @@ -118,16 +118,10 @@ lemma hasFPowerSeriesWithinOnBall_iff_exists_hasFPowerSeriesOnBall [CompleteSpac
constructor
· intro h
refine ⟨fun y ↦ p.sum (y - x), ?_, ?_⟩
· intro y ⟨ys,yb⟩
simp only [mem_eball, edist_eq_enorm_sub] at yb
have e0 := p.hasSum (x := y - x) ?_
· have e1 := (h.hasSum (y := y - x) ?_ ?_)
· simp only [add_sub_cancel] at e1
exact e1.unique e0
· simpa only [add_sub_cancel]
· simpa only [mem_eball, edist_zero_right]
· simp only [mem_eball, edist_zero_right]
exact lt_of_lt_of_le yb h.r_le
· rintro y ⟨ys, yb⟩
have : f (x + (y - x)) = p.sum (y - x) :=
h.sum (y := y - x) (by simpa using ys) (by simpa [edist_eq_enorm_sub] using yb)
simpa using this
· refine ⟨h.r_le, h.r_pos, ?_⟩
intro y lt
simp only [add_sub_cancel_left]
Expand Down Expand Up @@ -181,19 +175,15 @@ lemma analyticWithinAt_iff_exists_analyticAt' [CompleteSpace F] {f : E → F} {s
refine ⟨?_, ?_⟩
· rintro ⟨g, hf, hg⟩
rcases mem_nhdsWithin.1 hf with ⟨u, u_open, xu, hu⟩
let g' := Set.piecewise u g f
refine ⟨g', ?_, ?_, ?_⟩
· have : x ∈ u ∩ insert x s := ⟨xu, by simp⟩
simpa [g', xu, this] using hu this
refine ⟨u.piecewise g f, ?_, ?_, ?_⟩
· simpa [xu] using hu ⟨xu, by simp⟩
· intro y hy
by_cases h'y : y ∈ u
· have : y ∈ u ∩ insert x s := ⟨h'y, hy⟩
simpa [g', h'y, this] using hu this
· simp [g', h'y]
· apply hg.congr
filter_upwards [u_open.mem_nhds xu] with y hy using by simp [g', hy]
· simpa [h'y] using hu ⟨h'y, hy⟩
· simp [h'y]
· exact hg.congr <| (Set.piecewise_eqOn u g f).symm.eventuallyEq_of_mem (u_open.mem_nhds xu)
· rintro ⟨g, -, hf, hg⟩
exact ⟨g, by filter_upwards [self_mem_nhdsWithin] using hf, hg⟩
exact ⟨g, hf.eventuallyEq_of_mem self_mem_nhdsWithin, hg⟩

alias ⟨AnalyticWithinAt.exists_analyticAt, _⟩ := analyticWithinAt_iff_exists_analyticAt'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,28 +46,13 @@ is little o of the logarithmic counting function attached to `single e`.
-/
lemma one_isLittleO_logCounting_single [DecidableEq E] [ProperSpace E] {e : E} :
(1 : ℝ → ℝ) =o[atTop] logCounting (single e 1) := by
rw [isLittleO_iff]
intro c hc
simp only [Pi.one_apply, norm_eq_abs, eventually_atTop, abs_one]
use exp (|log ‖e‖| + c⁻¹)
intro b hb
have h₁b : 1 ≤ b := by
calc 1
_ ≤ exp (|log ‖e‖| + c⁻¹) := one_le_exp (by positivity)
_ ≤ b := hb
have h₁c : ‖e‖ ≤ exp (|log ‖e‖| + c⁻¹) := by
calc ‖e‖
_ ≤ exp (log ‖e‖) := le_exp_log ‖e‖
_ ≤ exp (|log ‖e‖| + c⁻¹) :=
exp_monotone (le_add_of_le_of_nonneg (le_abs_self _) (inv_pos.2 hc).le)
rw [← inv_mul_le_iff₀ hc, mul_one, abs_of_nonneg (logCounting_nonneg
(single_pos.2 Int.one_pos).le h₁b)]
calc c⁻¹
_ ≤ logCounting (single e 1) (exp (|log ‖e‖| + c⁻¹)) := by
simp [logCounting_single_eq_log_sub_const h₁c, le_sub_iff_add_le', le_abs_self (log ‖e‖)]
_ ≤ logCounting (single e 1) b := by
apply logCounting_mono (single_pos.2 Int.one_pos).le (mem_Ioi.2 (exp_pos _)) _ hb
simpa [mem_Ioi] using one_pos.trans_le h₁b
have hΘ : (fun r : ℝ ↦ log r - log ‖e‖) =Θ[atTop] log :=
(IsEquivalent.refl.sub_isLittleO (Real.isLittleO_const_log_atTop (c := log ‖e‖))).isTheta
have h₁ : (1 : ℝ → ℝ) =o[atTop] fun r : ℝ ↦ log r - log ‖e‖ :=
(hΘ.isLittleO_congr_right).2 Real.isLittleO_const_log_atTop
refine h₁.congr' EventuallyEq.rfl ?_
filter_upwards [eventually_ge_atTop ‖e‖] with r hr
simp [logCounting_single_eq_log_sub_const hr]

/--
A non-negative function with locally finite support is zero if and only if its logarithmic counting
Expand Down Expand Up @@ -124,16 +109,7 @@ theorem logCounting_isBigO_one_iff_analyticOnNhd {f : 𝕜 → E} (h : Meromorph
logCounting f ⊤ =O[atTop] (1 : ℝ → ℝ) ↔ AnalyticOnNhd 𝕜 (toMeromorphicNFOn f univ) univ := by
simp only [logCounting, reduceDIte]
rw [← Function.locallyFinsuppWithin.zero_iff_logCounting_bounded (negPart_nonneg _)]
constructor
· intro h₁f z hz
apply (meromorphicNFOn_toMeromorphicNFOn f univ
trivial).meromorphicOrderAt_nonneg_iff_analyticAt.1
rw [meromorphicOrderAt_toMeromorphicNFOn h.meromorphicOn (by trivial), ← WithTop.untop₀_nonneg,
← h.meromorphicOn.divisor_apply (by trivial), ← negPart_eq_zero,
← locallyFinsuppWithin.negPart_apply]
aesop
· intro h₁f
rwa [negPart_eq_zero, ← h.meromorphicOn.divisor_of_toMeromorphicNFOn,
(meromorphicNFOn_toMeromorphicNFOn _ _).divisor_nonneg_iff_analyticOnNhd]
rw [negPart_eq_zero, ← h.meromorphicOn.divisor_of_toMeromorphicNFOn,
(meromorphicNFOn_toMeromorphicNFOn _ _).divisor_nonneg_iff_analyticOnNhd]

end ValueDistribution
33 changes: 13 additions & 20 deletions Mathlib/Analysis/ConstantSpeed.lean
Original file line number Diff line number Diff line change
Expand Up @@ -151,19 +151,16 @@ theorem HasConstantSpeedOnWith.Icc_Icc {x y z : ℝ} (hfs : HasConstantSpeedOnWi

theorem hasConstantSpeedOnWith_zero_iff :
HasConstantSpeedOnWith f s 0 ↔ ∀ᵉ (x ∈ s) (y ∈ s), edist (f x) (f y) = 0 := by
dsimp [HasConstantSpeedOnWith]
simp only [zero_mul, ENNReal.ofReal_zero, ← eVariationOn.eq_zero_iff]
rw [hasConstantSpeedOnWith_iff_variationOnFromTo_eq]
constructor
· by_contra! ⟨h, hfs⟩
simp_rw [ne_eq, eVariationOn.eq_zero_iff] at hfs h
push Not at hfs
obtain ⟨x, xs, y, ys, hxy⟩ := hfs
rcases le_total x y with (xy | yx)
· exact hxy (h xs ys x ⟨xs, le_rfl, xy⟩ y ⟨ys, xy, le_rfl⟩)
· rw [edist_comm] at hxy
exact hxy (h ys xs y ⟨ys, le_rfl, yx⟩ x ⟨xs, yx, le_rfl⟩)
· rintro h x _ y _
simpa [h] using eVariationOn.mono (s := s) f inter_subset_left
· intro ⟨hf, h0⟩ x xs y ys
exact variationOnFromTo.edist_zero_of_eq_zero hf xs ys (by simp [h0 xs ys])
· intro h
have hf : LocallyBoundedVariationOn f s := fun x y xs ys ↦
((eVariationOn.eq_zero_iff f).2 fun a ha b hb ↦ h a ha.1 b hb.1).trans_lt
ENNReal.zero_lt_top |>.ne
exact ⟨hf, fun x xs y ys ↦ by
simpa using (variationOnFromTo.eq_zero_iff hf xs ys).2 fun a ha b hb ↦ h a ha.1 b hb.1⟩

theorem HasConstantSpeedOnWith.ratio {l' : ℝ≥0} (hl' : l' ≠ 0) {φ : ℝ → ℝ} (φm : MonotoneOn φ s)
(hfφ : HasConstantSpeedOnWith (f ∘ φ) s l) (hf : HasConstantSpeedOnWith f (φ '' s) l') ⦃x : ℝ⦄
Expand Down Expand Up @@ -212,14 +209,10 @@ theorem unique_unit_speed_on_Icc_zero {s t : ℝ} (hs : 0 ≤ s) (ht : 0 ≤ t)
EqOn φ id (Icc 0 s) := by
rw [← φst] at hf
convert unique_unit_speed φm hfφ hf ⟨le_rfl, hs⟩ using 1
have : φ 0 = 0 := by
have hm : 0 ∈ φ '' Icc 0 s := by simp only [φst, ht, mem_Icc, le_refl, and_self]
obtain ⟨x, xs, hx⟩ := hm
apply le_antisymm ((φm ⟨le_rfl, hs⟩ xs xs.1).trans_eq hx) _
have := φst ▸ mapsTo_image φ (Icc 0 s)
exact (mem_Icc.mp (@this 0 (by rw [mem_Icc]; exact ⟨le_rfl, hs⟩))).1
simp only [tsub_zero, this, add_zero]
rfl
have hφ0 : φ 0 = 0 :=
(φm.map_isLeast (isLeast_Icc hs)).unique <| by
simpa [φst] using (isLeast_Icc ht : IsLeast (Icc 0 t) 0)
exact funext fun y => by simp [hφ0]

/-- The natural parameterization of `f` on `s`, which, if `f` has locally bounded variation on `s`,
* has unit speed on `s` (by `has_unit_speed_naturalParameterization`).
Expand Down
Loading