Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit d74804b

Browse files
digama0avigad
authored andcommitted
add has_fderiv_at_filter
1 parent 21b1fcc commit d74804b

File tree

5 files changed

+320
-160
lines changed

5 files changed

+320
-160
lines changed

src/analysis/asymptotics.lean

Lines changed: 117 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -129,43 +129,65 @@ begin
129129
exact ⟨h₁ c cpos, h₂ c cpos⟩
130130
end
131131

132-
private theorem congr_aux1 (f₁ f₂ : α → β) (g : α → γ) (l : filter α)
133-
(h : {x | f₁ x = f₂ x} ∈ l.sets) :
134-
∀ c, {x : α | ∥f₁ x∥ ≤ c * ∥g x∥} ∈ l.sets ↔ {x : α | ∥f₂ x∥ ≤ c * ∥g x∥} ∈ l.sets :=
135-
begin
136-
intro c, split,
137-
{ intro h₀, filter_upwards [h₀, h], dsimp, intros x hx e, rw ←e, apply hx },
138-
intro h₀, filter_upwards [h₀, h], dsimp, intros x hx e, rw e, apply hx
139-
end
132+
theorem is_bigo_congr {f₁ f₂ : α → β} {g₁ g₂ : α → γ} {l : filter α}
133+
(hf : {x | f₁ x = f₂ x} ∈ l.sets) (hg : {x | g₁ x = g₂ x} ∈ l.sets) :
134+
is_bigo f₁ g₁ l ↔ is_bigo f₂ g₂ l :=
135+
bex_congr $ λ c _, filter.congr_sets $
136+
by filter_upwards [hf, hg] λ x e₁ e₂,
137+
by dsimp at e₁ e₂ ⊢; rw [e₁, e₂]
138+
139+
theorem is_littleo_congr {f₁ f₂ : α → β} {g₁ g₂ : α → γ} {l : filter α}
140+
(hf : {x | f₁ x = f₂ x} ∈ l.sets) (hg : {x | g₁ x = g₂ x} ∈ l.sets) :
141+
is_littleo f₁ g₁ l ↔ is_littleo f₂ g₂ l :=
142+
ball_congr $ λ c _, filter.congr_sets $
143+
by filter_upwards [hf, hg] λ x e₁ e₂,
144+
by dsimp at e₁ e₂ ⊢; rw [e₁, e₂]
145+
146+
theorem is_bigo.congr {f₁ f₂ : α → β} {g₁ g₂ : α → γ} {l : filter α}
147+
(hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
148+
is_bigo f₁ g₁ l → is_bigo f₂ g₂ l :=
149+
(is_bigo_congr (univ_mem_sets' hf) (univ_mem_sets' hg)).1
150+
151+
theorem is_littleo.congr {f₁ f₂ : α → β} {g₁ g₂ : α → γ} {l : filter α}
152+
(hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
153+
is_littleo f₁ g₁ l → is_littleo f₂ g₂ l :=
154+
(is_littleo_congr (univ_mem_sets' hf) (univ_mem_sets' hg)).1
155+
156+
theorem is_bigo_congr_left {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
157+
(h : {x | f₁ x = f₂ x} ∈ l.sets) :
158+
is_bigo f₁ g l ↔ is_bigo f₂ g l :=
159+
is_bigo_congr h (univ_mem_sets' $ λ _, rfl)
160+
161+
theorem is_littleo_congr_left {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
162+
(h : {x | f₁ x = f₂ x} ∈ l.sets) :
163+
is_littleo f₁ g l ↔ is_littleo f₂ g l :=
164+
is_littleo_congr h (univ_mem_sets' $ λ _, rfl)
140165

141166
theorem is_bigo.congr_left {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
142-
(h : {x | f₁ x = f₂ x} ∈ l.sets) :
143-
is_bigo f₁ g l ↔ is_bigo f₂ g l :=
144-
by simp only [is_bigo, congr_aux1 f₁ f₂ g l h]
167+
(hf : ∀ x, f₁ x = f₂ x) : is_bigo f₁ g l → is_bigo f₂ g l :=
168+
is_bigo.congr hf (λ _, rfl)
145169

146170
theorem is_littleo.congr_left {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
147-
(h : {x | f₁ x = f₂ x} ∈ l.sets) :
148-
is_littleo f₁ g l ↔ is_littleo f₂ g l :=
149-
by simp only [is_littleo, congr_aux1 f₁ f₂ g l h]
171+
(hf : ∀ x, f₁ x = f₂ x) : is_littleo f₁ g l → is_littleo f₂ g l :=
172+
is_littleo.congr hf (λ _, rfl)
150173

151-
private theorem congr_aux2 (f : α → β) (g₁ g₂ : α → γ) (l : filter α)
152-
(h : {x | g₁ x = g₂ x} ∈ l.sets) :
153-
∀ c, {x : α | ∥f x∥ ≤ c * ∥g₁ x∥} ∈ l.sets ↔ {x : α | ∥f x∥ ≤ c * ∥g₂ x∥} ∈ l.sets :=
154-
begin
155-
intro c, split,
156-
{ intro h₀, filter_upwards [h₀, h], dsimp, intros x hx e, rw ←e, apply hx },
157-
intro h₀, filter_upwards [h₀, h], dsimp, intros x hx e, rw e, apply hx
158-
end
174+
theorem is_bigo_congr_right {f : α → β} {g₁ g₂ : α → γ} {l : filter α}
175+
(h : {x | g₁ x = g₂ x} ∈ l.sets) :
176+
is_bigo f g₁ l ↔ is_bigo f g₂ l :=
177+
is_bigo_congr (univ_mem_sets' $ λ _, rfl) h
178+
179+
theorem is_littleo_congr_right {f : α → β} {g₁ g₂ : α → γ} {l : filter α}
180+
(h : {x | g₁ x = g₂ x} ∈ l.sets) :
181+
is_littleo f g₁ l ↔ is_littleo f g₂ l :=
182+
is_littleo_congr (univ_mem_sets' $ λ _, rfl) h
159183

160184
theorem is_bigo.congr_right {f : α → β} {g₁ g₂ : α → γ} {l : filter α}
161-
(h : {x | g₁ x = g₂ x} ∈ l.sets) :
162-
is_bigo f g₁ l ↔ is_bigo f g₂ l :=
163-
by simp only [is_bigo, congr_aux2 f g₁ g₂ l h]
185+
(hg : ∀ x, g₁ x = g₂ x) : is_bigo f g₁ l → is_bigo f g₂ l :=
186+
is_bigo.congr (λ _, rfl) hg
164187

165188
theorem is_littleo.congr_right {f : α → β} {g₁ g₂ : α → γ} {l : filter α}
166-
(h : {x | g₁ x = g₂ x} ∈ l.sets) :
167-
is_littleo f g₁ l ↔ is_littleo f g₂ l :=
168-
by simp only [is_littleo, congr_aux2 f g₁ g₂ l h]
189+
(hg : ∀ x, g₁ x = g₂ x) : is_littleo f g₁ l → is_littleo f g₂ l :=
190+
is_littleo.congr (λ _, rfl) hg
169191

170192
end
171193

@@ -230,23 +252,19 @@ end
230252
section
231253
variables [normed_group β] [has_norm γ]
232254

233-
@[simp]
234-
theorem is_bigo_norm_left {f : α → β} {g : α → γ} {l : filter α} :
255+
@[simp] theorem is_bigo_norm_left {f : α → β} {g : α → γ} {l : filter α} :
235256
is_bigo (λ x, ∥f x∥) g l ↔ is_bigo f g l :=
236257
by simp only [is_bigo, norm_norm]
237258

238-
@[simp]
239-
theorem is_littleo_norm_left {f : α → β} {g : α → γ} {l : filter α} :
259+
@[simp] theorem is_littleo_norm_left {f : α → β} {g : α → γ} {l : filter α} :
240260
is_littleo (λ x, ∥f x∥) g l ↔ is_littleo f g l :=
241261
by simp only [is_littleo, norm_norm]
242262

243-
@[simp]
244-
theorem is_bigo_neg_left {f : α → β} {g : α → γ} {l : filter α} :
263+
@[simp] theorem is_bigo_neg_left {f : α → β} {g : α → γ} {l : filter α} :
245264
is_bigo (λ x, -f x) g l ↔ is_bigo f g l :=
246265
by { rw ←is_bigo_norm_left, simp only [norm_neg], rw is_bigo_norm_left }
247266

248-
@[simp]
249-
theorem is_littleo_neg_left {f : α → β} {g : α → γ} {l : filter α} :
267+
@[simp] theorem is_littleo_neg_left {f : α → β} {g : α → γ} {l : filter α} :
250268
is_littleo (λ x, -f x) g l ↔ is_littleo f g l :=
251269
by { rw ←is_littleo_norm_left, simp only [norm_neg], rw is_littleo_norm_left }
252270

@@ -287,6 +305,46 @@ theorem is_littleo.sub {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
287305
is_littleo (λ x, f₁ x - f₂ x) g l :=
288306
h₁.add (is_littleo_neg_left.mpr h₂)
289307

308+
theorem is_bigo_comm {f₁ f₂ : α → β} {g : α → γ} {l : filter α} :
309+
is_bigo (λ x, f₁ x - f₂ x) g l ↔ is_bigo (λ x, f₂ x - f₁ x) g l :=
310+
by simpa using @is_bigo_neg_left _ _ _ _ _ (λ x, f₂ x - f₁ x) g l
311+
312+
theorem is_bigo.symm {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
313+
: is_bigo (λ x, f₁ x - f₂ x) g l → is_bigo (λ x, f₂ x - f₁ x) g l :=
314+
is_bigo_comm.1
315+
316+
theorem is_bigo.tri {f₁ f₂ f₃ : α → β} {g : α → γ} {l : filter α}
317+
(h₁ : is_bigo (λ x, f₁ x - f₂ x) g l)
318+
(h₂ : is_bigo (λ x, f₂ x - f₃ x) g l) :
319+
is_bigo (λ x, f₁ x - f₃ x) g l :=
320+
(h₁.add h₂).congr_left (by simp)
321+
322+
theorem is_bigo.congr_of_sub {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
323+
(h : is_bigo (λ x, f₁ x - f₂ x) g l) :
324+
is_bigo f₁ g l ↔ is_bigo f₂ g l :=
325+
⟨λ h', (h'.sub h).congr_left (λ x, sub_sub_cancel _ _),
326+
λ h', (h.add h').congr_left (λ x, sub_add_cancel _ _)⟩
327+
328+
theorem is_littleo_comm {f₁ f₂ : α → β} {g : α → γ} {l : filter α} :
329+
is_littleo (λ x, f₁ x - f₂ x) g l ↔ is_littleo (λ x, f₂ x - f₁ x) g l :=
330+
by simpa using @is_littleo_neg_left _ _ _ _ _ (λ x, f₂ x - f₁ x) g l
331+
332+
theorem is_littleo.symm {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
333+
: is_littleo (λ x, f₁ x - f₂ x) g l → is_littleo (λ x, f₂ x - f₁ x) g l :=
334+
is_littleo_comm.1
335+
336+
theorem is_littleo.tri {f₁ f₂ f₃ : α → β} {g : α → γ} {l : filter α}
337+
(h₁ : is_littleo (λ x, f₁ x - f₂ x) g l)
338+
(h₂ : is_littleo (λ x, f₂ x - f₃ x) g l) :
339+
is_littleo (λ x, f₁ x - f₃ x) g l :=
340+
(h₁.add h₂).congr_left (by simp)
341+
342+
theorem is_littleo.congr_of_sub {f₁ f₂ : α → β} {g : α → γ} {l : filter α}
343+
(h : is_littleo (λ x, f₁ x - f₂ x) g l) :
344+
is_littleo f₁ g l ↔ is_littleo f₂ g l :=
345+
⟨λ h', (h'.sub h).congr_left (λ x, sub_sub_cancel _ _),
346+
λ h', (h.add h').congr_left (λ x, sub_add_cancel _ _)⟩
347+
290348
end
291349

292350
section
@@ -296,6 +354,10 @@ theorem is_bigo_zero (g : α → γ) (l : filter α) :
296354
is_bigo (λ x, (0 : β)) g l :=
297355
1, zero_lt_one, by { filter_upwards [univ_mem_sets], intros x _, simp }⟩
298356

357+
theorem is_bigo_refl_left {f : α → β} {g : α → γ} {l : filter α} :
358+
is_bigo (λ x, f x - f x) g l :=
359+
by simpa using is_bigo_zero g l
360+
299361
theorem is_bigo_zero_right_iff {f : α → β} {l : filter α} :
300362
is_bigo f (λ x, (0 : γ)) l ↔ {x | f x = 0} ∈ l.sets :=
301363
begin
@@ -317,6 +379,10 @@ theorem is_littleo_zero (g : α → γ) (l : filter α) :
317379
by { filter_upwards [univ_mem_sets], intros x _, simp,
318380
exact mul_nonneg (le_of_lt cpos) (norm_nonneg _)}
319381

382+
theorem is_littleo_refl_left {f : α → β} {g : α → γ} {l : filter α} :
383+
is_littleo (λ x, f x - f x) g l :=
384+
by simpa using is_littleo_zero g l
385+
320386
theorem is_littleo_zero_right_iff {f : α → β} (l : filter α) :
321387
is_littleo f (λ x, (0 : γ)) l ↔ {x | f x = 0} ∈ l.sets :=
322388
begin
@@ -408,7 +474,7 @@ theorem is_bigo_of_is_bigo_const_mul_right {f : α → β} {g : α → γ} {l :
408474
is_bigo f g l :=
409475
begin
410476
cases classical.em (c = 0) with h' h',
411-
{ simp [h', is_bigo_zero_right_iff] at h, rw is_bigo.congr_left h, apply is_bigo_zero },
477+
{ simp [h', is_bigo_zero_right_iff] at h, rw is_bigo_congr_left h, apply is_bigo_zero },
412478
have cne0 : ∥c∥ ≠ 0, from mt (norm_eq_zero _).mp h',
413479
have cpos : ∥c∥ > 0, from lt_of_le_of_ne (norm_nonneg _) (ne.symm cne0),
414480
rcases h with ⟨c', c'pos, h''⟩,
@@ -433,7 +499,7 @@ theorem is_littleo_of_is_littleo_const_mul_right {f : α → β} {g : α → γ}
433499
is_littleo f g l :=
434500
begin
435501
cases classical.em (c = 0) with h' h',
436-
{ simp [h', is_littleo_zero_right_iff] at h, rw is_littleo.congr_left h, apply is_littleo_zero },
502+
{ simp [h', is_littleo_zero_right_iff] at h, rw is_littleo_congr_left h, apply is_littleo_zero },
437503
have cne0 : ∥c∥ ≠ 0, from mt (norm_eq_zero _).mp h',
438504
have cpos : ∥c∥ > 0, from lt_of_le_of_ne (norm_nonneg _) (ne.symm cne0),
439505
intros c' c'pos,
@@ -468,6 +534,19 @@ end
468534

469535
end
470536

537+
section
538+
variables [normed_group β] [normed_group γ]
539+
540+
theorem is_bigo.trans_tendsto {f : α → β} {g : α → γ} {l : filter α}
541+
(h₁ : is_bigo f g l) (h₂ : tendsto g l (nhds 0)) : tendsto f l (nhds 0) :=
542+
(@is_littleo_one_iff _ _ ℝ _ _ _ _).1 $ h₁.trans_is_littleo $ is_littleo_one_iff.2 h₂
543+
544+
theorem is_littleo.trans_tendsto {f : α → β} {g : α → γ} {l : filter α}
545+
(h₁ : is_littleo f g l) : tendsto g l (nhds 0) → tendsto f l (nhds 0) :=
546+
h₁.to_is_bigo.trans_tendsto
547+
548+
end
549+
471550
section
472551
variables [normed_field β] [normed_field γ]
473552

src/analysis/normed_space/bounded_linear_maps.lean

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,13 @@ theorem is_bigo_id {L : E → F} (h : is_bounded_linear_map L) (l : filter E) :
105105
let ⟨M, Mpos, hM⟩ := h.bound in
106106
⟨M, Mpos, mem_sets_of_superset univ_mem_sets (λ x _, hM x)⟩
107107

108+
theorem is_bigo_comp {L : F → G} (h : is_bounded_linear_map L)
109+
{f : E → F} (l : filter E) : is_bigo (λ x', L (f x')) f l :=
110+
((h.is_bigo_id ⊤).comp _).mono (map_le_iff_le_comap.mp lattice.le_top)
111+
108112
theorem is_bigo_sub {L : E → F} (h : is_bounded_linear_map L) (l : filter E) (x : E) :
109113
is_bigo (λ x', L (x' - x)) (λ x', x' - x) l :=
110-
((h.is_bigo_id ⊤).comp _).mono (map_le_iff_le_comap.mp lattice.le_top)
114+
is_bigo_comp h l
111115

112116
end
113117

0 commit comments

Comments
 (0)