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

Commit a35d682

Browse files
sgouezelmergify[bot]
authored andcommitted
feat(topology/order): more facts on continuous_on (#1140)
1 parent e598894 commit a35d682

File tree

4 files changed

+125
-4
lines changed

4 files changed

+125
-4
lines changed

src/topology/algebra/group.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ lemma continuous_inv [topological_group α] [topological_space β] {f : β →
4646
(hf : continuous f) : continuous (λx, (f x)⁻¹) :=
4747
continuous_inv'.comp hf
4848

49+
@[to_additive continuous_on.neg]
50+
lemma continuous_on.inv [topological_group α] [topological_space β] {f : β → α} {s : set β}
51+
(hf : continuous_on f s) : continuous_on (λx, (f x)⁻¹) s :=
52+
continuous_inv'.comp_continuous_on hf
53+
4954
@[to_additive tendsto_neg]
5055
lemma tendsto_inv [topological_group α] {f : β → α} {x : filter β} {a : α}
5156
(hf : tendsto f x (nhds a)) : tendsto (λx, (f x)⁻¹) x (nhds a⁻¹) :=
@@ -232,6 +237,10 @@ by simp; exact continuous_add hf (continuous_neg hg)
232237
lemma continuous_sub' [topological_add_group α] : continuous (λp:α×α, p.1 - p.2) :=
233238
continuous_sub continuous_fst continuous_snd
234239

240+
lemma continuous_on.sub [topological_add_group α] [topological_space β] {f : β → α} {g : β → α} {s : set β}
241+
(hf : continuous_on f s) (hg : continuous_on g s) : continuous_on (λx, f x - g x) s :=
242+
continuous_sub'.comp_continuous_on (hf.prod hg)
243+
235244
lemma tendsto_sub [topological_add_group α] {f : β → α} {g : β → α} {x : filter β} {a b : α}
236245
(hf : tendsto f x (nhds a)) (hg : tendsto g x (nhds b)) : tendsto (λx, f x - g x) x (nhds (a - b)) :=
237246
by simp; exact tendsto_add hf (tendsto_neg hg)

src/topology/algebra/monoid.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ continuous_mul continuous_const continuous_id
5454
lemma continuous_mul_right (a : α) : continuous (λ b:α, b * a) :=
5555
continuous_mul continuous_id continuous_const
5656

57+
@[to_additive continuous_on.add]
58+
lemma continuous_on.mul [topological_space β] {f : β → α} {g : β → α} {s : set β}
59+
(hf : continuous_on f s) (hg : continuous_on g s) :
60+
continuous_on (λx, f x * g x) s :=
61+
(continuous_mul'.comp_continuous_on (hf.prod hg) : _)
62+
5763
-- @[to_additive continuous_smul]
5864
lemma continuous_pow : ∀ n : ℕ, continuous (λ a : α, a ^ n)
5965
| 0 := by simpa using continuous_const

src/topology/basic.lean

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -545,23 +545,43 @@ begin
545545
exact ⟨u, λ x xu xs, hu ⟨xu, xs⟩, openu, au⟩
546546
end
547547

548+
theorem self_mem_nhds_within {a : α} {s : set α} : s ∈ nhds_within a s :=
549+
begin
550+
rw [nhds_within, mem_inf_principal],
551+
simp only [imp_self],
552+
exact univ_mem_sets
553+
end
554+
548555
theorem inter_mem_nhds_within (s : set α) {t : set α} {a : α} (h : t ∈ nhds a) :
549556
s ∩ t ∈ nhds_within a s :=
550557
inter_mem_sets (mem_inf_sets_of_right (mem_principal_self s)) (mem_inf_sets_of_left h)
551558

552559
theorem nhds_within_mono (a : α) {s t : set α} (h : s ⊆ t) : nhds_within a s ≤ nhds_within a t :=
553560
lattice.inf_le_inf (le_refl _) (principal_mono.mpr h)
554561

555-
theorem nhds_within_restrict' {a : α} (s : set α) {t : set α} (h : t ∈ nhds a) :
562+
theorem nhds_within_restrict'' {a : α} (s : set α) {t : set α} (h : t ∈ nhds_within a s) :
556563
nhds_within a s = nhds_within a (s ∩ t) :=
557564
le_antisymm
558-
(lattice.le_inf lattice.inf_le_left (le_principal_iff.mpr (inter_mem_nhds_within s h)))
565+
(lattice.le_inf lattice.inf_le_left (le_principal_iff.mpr (inter_mem_sets self_mem_nhds_within h)))
559566
(lattice.inf_le_inf (le_refl _) (principal_mono.mpr (set.inter_subset_left _ _)))
560567

568+
theorem nhds_within_restrict' {a : α} (s : set α) {t : set α} (h : t ∈ nhds a) :
569+
nhds_within a s = nhds_within a (s ∩ t) :=
570+
nhds_within_restrict'' s $ mem_inf_sets_of_left h
571+
561572
theorem nhds_within_restrict {a : α} (s : set α) {t : set α} (h₀ : a ∈ t) (h₁ : is_open t) :
562573
nhds_within a s = nhds_within a (s ∩ t) :=
563574
nhds_within_restrict' s (mem_nhds_sets h₁ h₀)
564575

576+
theorem nhds_within_le_of_mem {a : α} {s t : set α} (h : s ∈ nhds_within a t) :
577+
nhds_within a t ≤ nhds_within a s :=
578+
begin
579+
rcases (mem_nhds_within _ _ _).1 h with ⟨u, u_open, au, uts⟩,
580+
have : nhds_within a t = nhds_within a (t ∩ u) := nhds_within_restrict _ au u_open,
581+
rw [this, inter_comm],
582+
exact nhds_within_mono _ uts
583+
end
584+
565585
theorem nhds_within_eq_nhds_within {a : α} {s t u : set α}
566586
(h₀ : a ∈ s) (h₁ : is_open s) (h₂ : t ∩ s = u ∩ s) :
567587
nhds_within a t = nhds_within a u :=

src/topology/order.lean

Lines changed: 88 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,16 @@ have ∀ t, is_open (function.restrict f s ⁻¹' t) ↔ ∃ (u : set α), is_op
655655
end,
656656
by rw [continuous_on_iff_continuous_restrict, continuous]; simp only [this]
657657

658+
theorem continuous_on_iff_is_closed {f : α → β} {s : set α} :
659+
continuous_on f s ↔ ∀ t : set β, is_closed t → ∃ u, is_closed u ∧ f ⁻¹' t ∩ s = u ∩ s :=
660+
have ∀ t, is_closed (function.restrict f s ⁻¹' t) ↔ ∃ (u : set α), is_closed u ∧ f ⁻¹' t ∩ s = u ∩ s,
661+
begin
662+
intro t,
663+
rw [is_closed_induced_iff, function.restrict_eq, set.preimage_comp],
664+
simp only [subtype.preimage_val_eq_preimage_val_iff]
665+
end,
666+
by rw [continuous_on_iff_continuous_restrict, continuous_iff_is_closed]; simp only [this]
667+
658668
theorem nhds_within_le_comap {x : α} {s : set α} {f : α → β} (ctsf : continuous_within_at f s x) :
659669
nhds_within x s ≤ comap f (nhds_within (f x) (f '' s)) :=
660670
map_le_iff_le_comap.1 ctsf.tendsto_nhds_within_image
@@ -671,6 +681,14 @@ lemma continuous_within_at.mono {f : α → β} {s t : set α} {x : α} (h : con
671681
(hs : s ⊆ t) : continuous_within_at f s x :=
672682
tendsto_le_left (nhds_within_mono x hs) h
673683

684+
lemma continuous_within_at_inter' {f : α → β} {s t : set α} {x : α} (h : t ∈ nhds_within x s) :
685+
continuous_within_at f (s ∩ t) x ↔ continuous_within_at f s x :=
686+
by simp [continuous_within_at, nhds_within_restrict'' s h]
687+
688+
lemma continuous_within_at_inter {f : α → β} {s t : set α} {x : α} (h : t ∈ nhds x) :
689+
continuous_within_at f (s ∩ t) x ↔ continuous_within_at f s x :=
690+
by simp [continuous_within_at, nhds_within_restrict' s h]
691+
674692
lemma continuous_on.congr_mono {f g : α → β} {s s₁ : set α} (h : continuous_on f s)
675693
(h' : ∀x ∈ s₁, g x = f x) (h₁ : s₁ ⊆ s) : continuous_on g s₁ :=
676694
begin
@@ -690,6 +708,13 @@ lemma continuous_at.continuous_within_at {f : α → β} {s : set α} {x : α} (
690708
continuous_within_at f s x :=
691709
continuous_within_at.mono ((continuous_within_at_univ f x).2 h) (subset_univ _)
692710

711+
lemma continuous_within_at.continuous_at {f : α → β} {s : set α} {x : α}
712+
(h : continuous_within_at f s x) (hs : s ∈ nhds x) : continuous_at f x :=
713+
begin
714+
have : s = univ ∩ s, by rw univ_inter,
715+
rwa [this, continuous_within_at_inter hs, continuous_within_at_univ] at h
716+
end
717+
693718
lemma continuous_within_at.comp {g : β → γ} {f : α → β} {s : set α} {t : set β} {x : α}
694719
(hg : continuous_within_at g t (f x)) (hf : continuous_within_at f s x) (h : f '' s ⊆ t) :
695720
continuous_within_at (g ∘ f) s x :=
@@ -727,15 +752,58 @@ begin
727752
exact h.mono (subset_univ _)
728753
end
729754

755+
lemma continuous.comp_continuous_on {g : β → γ} {f : α → β} {s : set α}
756+
(hg : continuous g) (hf : continuous_on f s) :
757+
continuous_on (g ∘ f) s :=
758+
hg.continuous_on.comp hf (subset_univ _)
759+
760+
lemma continuous.continuous_at {f : α → β} {x : α} (h : continuous f) :
761+
continuous_at f x :=
762+
begin
763+
have := continuous_iff_continuous_on_univ.1 h x (mem_univ _),
764+
rwa continuous_within_at_univ at this,
765+
end
766+
767+
lemma continuous_at.preimage_mem_nhds {f : α → β} {x : α} {t : set β} (h : continuous_at f x)
768+
(ht : t ∈ nhds (f x)) : f ⁻¹' t ∈ nhds x :=
769+
h ht
770+
771+
lemma continuous_within_at.preimage_mem_nhds_within {f : α → β} {x : α} {s : set α} {t : set β}
772+
(h : continuous_within_at f s x) (ht : t ∈ nhds (f x)) : f ⁻¹' t ∈ nhds_within x s :=
773+
h ht
774+
775+
lemma continuous_within_at.congr_of_mem_nhds_within {f f₁ : α → β} {s : set α} {x : α}
776+
(h : continuous_within_at f s x) (h₁ : {y | f₁ y = f y} ∈ nhds_within x s) (hx : f₁ x = f x) :
777+
continuous_within_at f₁ s x :=
778+
by rwa [continuous_within_at, filter.tendsto, hx, filter.map_cong h₁]
779+
730780
lemma continuous_on_const {s : set α} {c : β} : continuous_on (λx, c) s :=
731781
continuous_const.continuous_on
732782

783+
lemma continuous_on_open_iff {f : α → β} {s : set α} (hs : is_open s) :
784+
continuous_on f s ↔ (∀t, _root_.is_open t → is_open (s ∩ f⁻¹' t)) :=
785+
begin
786+
rw continuous_on_iff',
787+
split,
788+
{ assume h t ht,
789+
rcases h t ht with ⟨u, u_open, hu⟩,
790+
rw [inter_comm, hu],
791+
apply is_open_inter u_open hs },
792+
{ assume h t ht,
793+
refine ⟨s ∩ f ⁻¹' t, h t ht, _⟩,
794+
rw [@inter_comm _ s (f ⁻¹' t), inter_assoc, inter_self] }
795+
end
796+
733797
lemma continuous_on.preimage_open_of_open {f : α → β} {s : set α} {t : set β}
734798
(hf : continuous_on f s) (hs : is_open s) (ht : is_open t) : is_open (s ∩ f⁻¹' t) :=
799+
(continuous_on_open_iff hs).1 hf t ht
800+
801+
lemma continuous_on.preimage_closed_of_closed {f : α → β} {s : set α} {t : set β}
802+
(hf : continuous_on f s) (hs : is_closed s) (ht : is_closed t) : is_closed (s ∩ f⁻¹' t) :=
735803
begin
736-
rcases continuous_on_iff'.1 hf t ht with ⟨u, hu⟩,
804+
rcases continuous_on_iff_is_closed.1 hf t ht with ⟨u, hu⟩,
737805
rw [inter_comm, hu.2],
738-
apply is_open_inter hu.1 hs
806+
apply is_closed_inter hu.1 hs
739807
end
740808

741809
lemma continuous_on.preimage_interior_subset_interior_preimage {f : α → β} {s : set α} {t : set β}
@@ -757,6 +825,24 @@ begin
757825
rwa [continuous_within_at, ← nhds_within_restrict _ xt open_t] at this
758826
end
759827

828+
lemma continuous_on_open_of_generate_from {β : Type*} {s : set α} {T : set (set β)} {f : α → β}
829+
(hs : is_open s) (h : ∀t ∈ T, is_open (s ∩ f⁻¹' t)) :
830+
@continuous_on α β _ (topological_space.generate_from T) f s :=
831+
begin
832+
rw continuous_on_open_iff,
833+
assume t ht,
834+
induction ht with u hu u v Tu Tv hu hv U hU hU',
835+
{ exact h u hu },
836+
{ simp only [preimage_univ, inter_univ], exact hs },
837+
{ have : s ∩ f ⁻¹' (u ∩ v) = (s ∩ f ⁻¹' u) ∩ (s ∩ f ⁻¹' v),
838+
by { ext x, simp, split, finish, finish },
839+
rw this,
840+
exact is_open_inter hu hv },
841+
{ rw [preimage_sUnion, inter_bUnion],
842+
exact is_open_bUnion hU' },
843+
{ exact hs }
844+
end
845+
760846
end topα
761847

762848
end constructions

0 commit comments

Comments
 (0)