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

Commit 56a5240

Browse files
feat(calculus/fderiv): invariance of fderiv under linear equivs (#1977)
* feat(calculus/fderiv): invariance of fderiv under linear equivs * missing material * coherent naming conventions * fix build * coherent naming conventions * yury's comments Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent a79a055 commit 56a5240

File tree

6 files changed

+245
-9
lines changed

6 files changed

+245
-9
lines changed

src/analysis/calculus/fderiv.lean

Lines changed: 175 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,10 @@ lemma differentiable_at.differentiable_within_at
395395
(h : differentiable_at 𝕜 f x) : differentiable_within_at 𝕜 f s x :=
396396
(differentiable_within_at_univ.2 h).mono (subset_univ _)
397397

398+
lemma differentiable.differentiable_at (h : differentiable 𝕜 f) :
399+
differentiable_at 𝕜 f x :=
400+
h x
401+
398402
lemma differentiable_within_at.differentiable_at
399403
(h : differentiable_within_at 𝕜 f s x) (hs : s ∈ 𝓝 x) : differentiable_at 𝕜 f x :=
400404
h.imp (λ f' hf', hf'.has_fderiv_at hs)
@@ -435,7 +439,7 @@ lemma fderiv_within_subset (st : s ⊆ t) (ht : unique_diff_within_at 𝕜 s x)
435439
begin
436440
ext x : 1,
437441
by_cases h : differentiable_at 𝕜 f x,
438-
{ apply has_fderiv_within_at.fderiv_within _ (is_open_univ.unique_diff_within_at (mem_univ _)),
442+
{ apply has_fderiv_within_at.fderiv_within _ unique_diff_within_at_univ,
439443
rw has_fderiv_within_at_univ,
440444
apply h.has_fderiv_at },
441445
{ have : ¬ differentiable_within_at 𝕜 f univ x,
@@ -512,6 +516,11 @@ lemma differentiable_on.congr (h : differentiable_on 𝕜 f s) (h' : ∀x ∈ s,
512516
differentiable_on 𝕜 f₁ s :=
513517
λ x hx, (h x hx).congr h' (h' x hx)
514518

519+
lemma differentiable_on_congr (h' : ∀x ∈ s, f₁ x = f x) :
520+
differentiable_on 𝕜 f₁ s ↔ differentiable_on 𝕜 f s :=
521+
⟨λ h, differentiable_on.congr h (λy hy, (h' y hy).symm),
522+
λ h, differentiable_on.congr h h'⟩
523+
515524
lemma differentiable_at.congr_of_mem_nhds (h : differentiable_at 𝕜 f x)
516525
(hL : ∀ᶠ y in 𝓝 x, f₁ y = f y) : differentiable_at 𝕜 f₁ x :=
517526
has_fderiv_at.differentiable_at (has_fderiv_at_filter.congr_of_mem_sets h.has_fderiv_at hL (mem_of_nhds hL : _))
@@ -622,14 +631,17 @@ lemma differentiable_at_const (c : F) : differentiable_at 𝕜 (λx, c) x :=
622631
lemma differentiable_within_at_const (c : F) : differentiable_within_at 𝕜 (λx, c) s x :=
623632
differentiable_at.differentiable_within_at (differentiable_at_const _)
624633

625-
lemma fderiv_const (c : F) : fderiv 𝕜 (λy, c) x = 0 :=
634+
lemma fderiv_const_apply (c : F) : fderiv 𝕜 (λy, c) x = 0 :=
626635
has_fderiv_at.fderiv (has_fderiv_at_const c x)
627636

628-
lemma fderiv_within_const (c : F) (hxs : unique_diff_within_at 𝕜 s x) :
637+
lemma fderiv_const (c : F) : fderiv 𝕜 (λ (y : E), c) = 0 :=
638+
by { ext m, rw fderiv_const_apply, refl }
639+
640+
lemma fderiv_within_const_apply (c : F) (hxs : unique_diff_within_at 𝕜 s x) :
629641
fderiv_within 𝕜 (λy, c) s x = 0 :=
630642
begin
631643
rw differentiable_at.fderiv_within (differentiable_at_const _) hxs,
632-
exact fderiv_const _
644+
exact fderiv_const_apply _
633645
end
634646

635647
lemma differentiable_const (c : F) : differentiable 𝕜 (λx : E, c) :=
@@ -705,7 +717,7 @@ end
705717
protected lemma continuous_linear_map.has_fderiv_within_at : has_fderiv_within_at e e s x :=
706718
e.has_fderiv_at_filter
707719

708-
protected lemma continuous_linear_map.has_fderiv_at : has_fderiv_at e e x :=
720+
protected lemma continuous_linear_map.has_fderiv_at : has_fderiv_at e e x :=
709721
e.has_fderiv_at_filter
710722

711723
protected lemma continuous_linear_map.differentiable_at : differentiable_at 𝕜 e x :=
@@ -1363,24 +1375,37 @@ lemma differentiable_at.comp {g : F → G}
13631375
differentiable_at 𝕜 (g ∘ f) x :=
13641376
(hg.has_fderiv_at.comp x hf.has_fderiv_at).differentiable_at
13651377

1378+
lemma differentiable_at.comp_differentiable_within_at {g : F → G}
1379+
(hg : differentiable_at 𝕜 g (f x)) (hf : differentiable_within_at 𝕜 f s x) :
1380+
differentiable_within_at 𝕜 (g ∘ f) s x :=
1381+
(differentiable_within_at_univ.2 hg).comp x hf (by simp)
1382+
13661383
lemma fderiv_within.comp {g : F → G} {t : set F}
13671384
(hg : differentiable_within_at 𝕜 g t (f x)) (hf : differentiable_within_at 𝕜 f s x)
13681385
(h : s ⊆ f ⁻¹' t) (hxs : unique_diff_within_at 𝕜 s x) :
1369-
fderiv_within 𝕜 (g ∘ f) s x =
1370-
continuous_linear_map.comp (fderiv_within 𝕜 g t (f x)) (fderiv_within 𝕜 f s x) :=
1386+
fderiv_within 𝕜 (g ∘ f) s x = (fderiv_within 𝕜 g t (f x)).comp (fderiv_within 𝕜 f s x) :=
13711387
begin
13721388
apply has_fderiv_within_at.fderiv_within _ hxs,
13731389
exact has_fderiv_within_at.comp x (hg.has_fderiv_within_at) (hf.has_fderiv_within_at) h
13741390
end
13751391

13761392
lemma fderiv.comp {g : F → G}
13771393
(hg : differentiable_at 𝕜 g (f x)) (hf : differentiable_at 𝕜 f x) :
1378-
fderiv 𝕜 (g ∘ f) x = continuous_linear_map.comp (fderiv 𝕜 g (f x)) (fderiv 𝕜 f x) :=
1394+
fderiv 𝕜 (g ∘ f) x = (fderiv 𝕜 g (f x)).comp (fderiv 𝕜 f x) :=
13791395
begin
13801396
apply has_fderiv_at.fderiv,
13811397
exact has_fderiv_at.comp x hg.has_fderiv_at hf.has_fderiv_at
13821398
end
13831399

1400+
lemma fderiv.comp_fderiv_within {g : F → G}
1401+
(hg : differentiable_at 𝕜 g (f x)) (hf : differentiable_within_at 𝕜 f s x)
1402+
(hxs : unique_diff_within_at 𝕜 s x) :
1403+
fderiv_within 𝕜 (g ∘ f) s x = (fderiv 𝕜 g (f x)).comp (fderiv_within 𝕜 f s x) :=
1404+
begin
1405+
apply has_fderiv_within_at.fderiv_within _ hxs,
1406+
exact has_fderiv_at.comp_has_fderiv_within_at x (hg.has_fderiv_at) (hf.has_fderiv_within_at)
1407+
end
1408+
13841409
lemma differentiable_on.comp {g : F → G} {t : set F}
13851410
(hg : differentiable_on 𝕜 g t) (hf : differentiable_on 𝕜 f s) (st : s ⊆ f ⁻¹' t) :
13861411
differentiable_on 𝕜 (g ∘ f) s :=
@@ -1390,6 +1415,11 @@ lemma differentiable.comp {g : F → G} (hg : differentiable 𝕜 g) (hf : diffe
13901415
differentiable 𝕜 (g ∘ f) :=
13911416
λx, differentiable_at.comp x (hg (f x)) (hf x)
13921417

1418+
lemma differentiable.comp_differentiable_on {g : F → G} (hg : differentiable 𝕜 g)
1419+
(hf : differentiable_on 𝕜 f s) :
1420+
differentiable_on 𝕜 (g ∘ f) s :=
1421+
(differentiable_on_univ.2 hg).comp hf (by simp)
1422+
13931423
end composition
13941424

13951425
section smul
@@ -1626,6 +1656,122 @@ lemma fderiv_const_mul (hc : differentiable_at 𝕜 c x) (d : 𝕜) :
16261656

16271657
end mul
16281658

1659+
section continuous_linear_equiv
1660+
/-! ### Differentiability of linear equivs, and invariance of differentiability -/
1661+
1662+
variable (iso : E ≃L[𝕜] F)
1663+
1664+
protected lemma continuous_linear_equiv.has_fderiv_within_at :
1665+
has_fderiv_within_at iso (iso : E →L[𝕜] F) s x :=
1666+
iso.to_continuous_linear_map.has_fderiv_within_at
1667+
1668+
protected lemma continuous_linear_equiv.has_fderiv_at : has_fderiv_at iso (iso : E →L[𝕜] F) x :=
1669+
iso.to_continuous_linear_map.has_fderiv_at_filter
1670+
1671+
protected lemma continuous_linear_equiv.differentiable_at : differentiable_at 𝕜 iso x :=
1672+
iso.has_fderiv_at.differentiable_at
1673+
1674+
protected lemma continuous_linear_equiv.differentiable_within_at :
1675+
differentiable_within_at 𝕜 iso s x :=
1676+
iso.differentiable_at.differentiable_within_at
1677+
1678+
protected lemma continuous_linear_equiv.fderiv : fderiv 𝕜 iso x = iso :=
1679+
iso.has_fderiv_at.fderiv
1680+
1681+
protected lemma continuous_linear_equiv.fderiv_within (hxs : unique_diff_within_at 𝕜 s x) :
1682+
fderiv_within 𝕜 iso s x = iso :=
1683+
iso.to_continuous_linear_map.fderiv_within hxs
1684+
1685+
protected lemma continuous_linear_equiv.differentiable : differentiable 𝕜 iso :=
1686+
λx, iso.differentiable_at
1687+
1688+
protected lemma continuous_linear_equiv.differentiable_on : differentiable_on 𝕜 iso s :=
1689+
iso.differentiable.differentiable_on
1690+
1691+
lemma continuous_linear_equiv.comp_differentiable_within_at_iff {f : G → E} {s : set G} {x : G} :
1692+
differentiable_within_at 𝕜 (iso ∘ f) s x ↔ differentiable_within_at 𝕜 f s x :=
1693+
begin
1694+
refine ⟨λ H, _, λ H, iso.differentiable.differentiable_at.comp_differentiable_within_at x H⟩,
1695+
have : differentiable_within_at 𝕜 (iso.symm ∘ (iso ∘ f)) s x :=
1696+
iso.symm.differentiable.differentiable_at.comp_differentiable_within_at x H,
1697+
rwa [← function.comp.assoc iso.symm iso f, iso.symm_comp_self] at this,
1698+
end
1699+
1700+
lemma continuous_linear_equiv.comp_differentiable_at_iff {f : G → E} {x : G} :
1701+
differentiable_at 𝕜 (iso ∘ f) x ↔ differentiable_at 𝕜 f x :=
1702+
by rw [← differentiable_within_at_univ, ← differentiable_within_at_univ,
1703+
iso.comp_differentiable_within_at_iff]
1704+
1705+
lemma continuous_linear_equiv.comp_differentiable_on_iff {f : G → E} {s : set G} :
1706+
differentiable_on 𝕜 (iso ∘ f) s ↔ differentiable_on 𝕜 f s :=
1707+
begin
1708+
rw [differentiable_on, differentiable_on],
1709+
simp only [iso.comp_differentiable_within_at_iff],
1710+
end
1711+
1712+
lemma continuous_linear_equiv.comp_differentiable_iff {f : G → E} :
1713+
differentiable 𝕜 (iso ∘ f) ↔ differentiable 𝕜 f :=
1714+
begin
1715+
rw [← differentiable_on_univ, ← differentiable_on_univ],
1716+
exact iso.comp_differentiable_on_iff
1717+
end
1718+
1719+
lemma continuous_linear_equiv.comp_has_fderiv_within_at_iff
1720+
{f : G → E} {s : set G} {x : G} {f' : G →L[𝕜] E} :
1721+
has_fderiv_within_at (iso ∘ f) ((iso : E →L[𝕜] F).comp f') s x ↔ has_fderiv_within_at f f' s x :=
1722+
begin
1723+
refine ⟨λ H, _, λ H, iso.has_fderiv_at.comp_has_fderiv_within_at x H⟩,
1724+
have A : f = iso.symm ∘ (iso ∘ f), by { rw [← function.comp.assoc, iso.symm_comp_self], refl },
1725+
have B : f' = (iso.symm : F →L[𝕜] E).comp ((iso : E →L[𝕜] F).comp f'),
1726+
by rw [← continuous_linear_map.comp_assoc, iso.coe_symm_comp_coe, continuous_linear_map.id_comp],
1727+
rw [A, B],
1728+
exact iso.symm.has_fderiv_at.comp_has_fderiv_within_at x H
1729+
end
1730+
1731+
lemma continuous_linear_equiv.comp_has_fderiv_at_iff {f : G → E} {x : G} {f' : G →L[𝕜] E} :
1732+
has_fderiv_at (iso ∘ f) ((iso : E →L[𝕜] F).comp f') x ↔ has_fderiv_at f f' x :=
1733+
by rw [← has_fderiv_within_at_univ, ← has_fderiv_within_at_univ, iso.comp_has_fderiv_within_at_iff]
1734+
1735+
lemma continuous_linear_equiv.comp_has_fderiv_within_at_iff'
1736+
{f : G → E} {s : set G} {x : G} {f' : G →L[𝕜] F} :
1737+
has_fderiv_within_at (iso ∘ f) f' s x ↔
1738+
has_fderiv_within_at f ((iso.symm : F →L[𝕜] E).comp f') s x :=
1739+
begin
1740+
set g := (iso.symm : F →L[𝕜] E).comp f' with h,
1741+
have : f' = (iso : E →L[𝕜] F).comp g,
1742+
by rw [h, ← continuous_linear_map.comp_assoc, iso.coe_comp_coe_symm,
1743+
continuous_linear_map.id_comp],
1744+
rw this,
1745+
exact iso.comp_has_fderiv_within_at_iff
1746+
end
1747+
1748+
lemma continuous_linear_equiv.comp_has_fderiv_at_iff' {f : G → E} {x : G} {f' : G →L[𝕜] F} :
1749+
has_fderiv_at (iso ∘ f) f' x ↔ has_fderiv_at f ((iso.symm : F →L[𝕜] E).comp f') x :=
1750+
by rw [← has_fderiv_within_at_univ, ← has_fderiv_within_at_univ, iso.comp_has_fderiv_within_at_iff']
1751+
1752+
lemma continuous_linear_equiv.comp_fderiv_within {f : G → E} {s : set G} {x : G}
1753+
(hxs : unique_diff_within_at 𝕜 s x) :
1754+
fderiv_within 𝕜 (iso ∘ f) s x = (iso : E →L[𝕜] F).comp (fderiv_within 𝕜 f s x) :=
1755+
begin
1756+
by_cases h : differentiable_within_at 𝕜 f s x,
1757+
{ rw [fderiv.comp_fderiv_within x iso.differentiable_at h hxs, iso.fderiv] },
1758+
{ have : ¬differentiable_within_at 𝕜 (iso ∘ f) s x,
1759+
by simp [-coe_fn_coe_base, iso.comp_differentiable_within_at_iff, h],
1760+
rw [fderiv_within_zero_of_not_differentiable_within_at h,
1761+
fderiv_within_zero_of_not_differentiable_within_at this],
1762+
ext y,
1763+
simp [-coe_fn_coe_base] }
1764+
end
1765+
1766+
lemma continuous_linear_equiv.comp_fderiv {f : G → E} {x : G} :
1767+
fderiv 𝕜 (iso ∘ f) x = (iso : E →L[𝕜] F).comp (fderiv 𝕜 f x) :=
1768+
begin
1769+
rw [← fderiv_within_univ, ← fderiv_within_univ],
1770+
exact iso.comp_fderiv_within unique_diff_within_at_univ,
1771+
end
1772+
1773+
end continuous_linear_equiv
1774+
16291775
end
16301776

16311777
section
@@ -1726,6 +1872,27 @@ begin
17261872
rw [this, closure_univ]
17271873
end
17281874

1875+
lemma continuous_linear_equiv.unique_diff_on_preimage_iff (e : F ≃L[𝕜] E) :
1876+
unique_diff_on 𝕜 (e ⁻¹' s) ↔ unique_diff_on 𝕜 s :=
1877+
begin
1878+
split,
1879+
{ assume hs x hx,
1880+
have A : s = e '' (e.symm '' s) :=
1881+
(equiv.symm_image_image (e.symm.to_linear_equiv.to_equiv) s).symm,
1882+
have B : e.symm '' s = e⁻¹' s :=
1883+
equiv.image_eq_preimage e.symm.to_linear_equiv.to_equiv s,
1884+
rw [A, B, (e.apply_symm_apply x).symm],
1885+
refine has_fderiv_within_at.unique_diff_within_at_of_continuous_linear_equiv e
1886+
e.has_fderiv_within_at (hs _ _),
1887+
rwa [mem_preimage, e.apply_symm_apply x] },
1888+
{ assume hs x hx,
1889+
have : e ⁻¹' s = e.symm '' s :=
1890+
(equiv.image_eq_preimage e.symm.to_linear_equiv.to_equiv s).symm,
1891+
rw [this, (e.symm_apply_apply x).symm],
1892+
exact has_fderiv_within_at.unique_diff_within_at_of_continuous_linear_equiv e.symm
1893+
e.symm.has_fderiv_within_at (hs _ hx) },
1894+
end
1895+
17291896
end tangent_cone
17301897

17311898
section restrict_scalars

src/analysis/normed_space/basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,10 @@ by simp [norm, le_max_left]
245245
lemma norm_snd_le (x : α × β) : ∥x.2∥ ≤ ∥x∥ :=
246246
by simp [norm, le_max_right]
247247

248+
lemma norm_prod_le_iff {x : α × β} {r : ℝ} :
249+
∥x∥ ≤ r ↔ ∥x.1∥ ≤ r ∧ ∥x.2∥ ≤ r :=
250+
max_le_iff
251+
248252
/-- normed group instance on the product of finitely many normed groups, using the sup norm. -/
249253
instance pi.normed_group {π : ι → Type*} [fintype ι] [∀i, normed_group (π i)] :
250254
normed_group (Πi, π i) :=

src/linear_algebra/basic.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,6 +1343,10 @@ e.to_add_equiv.map_eq_zero_iff
13431343
@[simp] theorem map_ne_zero_iff (e : M ≃ₗ[R] M₂) {x : M} : e x ≠ 0 ↔ x ≠ 0 :=
13441344
e.to_add_equiv.map_ne_zero_iff
13451345

1346+
@[simp] theorem symm_symm (e : M ≃ₗ[R] M₂) : e.symm.symm = e := by { cases e, refl }
1347+
1348+
@[simp] theorem symm_symm_apply (e : M ≃ₗ[R] M₂) (x : M) : e.symm.symm x = e x := by { cases e, refl }
1349+
13461350
/-- A bijective linear map is a linear equivalence. Here, bijectivity is described by saying that
13471351
the kernel of `f` is `{0}` and the range is the universal set. -/
13481352
noncomputable def of_bijective

src/topology/algebra/module.lean

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ variables
165165
{M : Type*} [topological_space M] [add_comm_group M]
166166
{M₂ : Type*} [topological_space M₂] [add_comm_group M₂]
167167
{M₃ : Type*} [topological_space M₃] [add_comm_group M₃]
168-
[module R M] [module R M₂] [module R M₃]
168+
{M₄ : Type*} [topological_space M₄] [add_comm_group M₄]
169+
[module R M] [module R M₂] [module R M₃] [module R M₄]
169170

170171
/-- Coerce continuous linear maps to linear maps. -/
171172
instance : has_coe (M →L[R] M₂) (M →ₗ[R] M₂) := ⟨to_linear_map⟩
@@ -274,6 +275,10 @@ by { ext, simp }
274275
(g₁ + g₂).comp f = g₁.comp f + g₂.comp f :=
275276
by { ext, simp }
276277

278+
theorem comp_assoc (h : M₃ →L[R] M₄) (g : M₂ →L[R] M₃) (f : M →L[R] M₂) :
279+
(h.comp g).comp f = h.comp (g.comp f) :=
280+
rfl
281+
277282
instance : has_mul (M →L[R] M) := ⟨comp⟩
278283

279284
instance [topological_add_group M] : ring (M →L[R] M) :=
@@ -413,6 +418,29 @@ def to_homeomorph (e : M ≃L[R] M₂) : M ≃ₜ M₂ := { ..e }
413418
@[simp] lemma map_eq_zero_iff (e : M ≃L[R] M₂) {x : M} : e x = 0 ↔ x = 0 :=
414419
e.to_linear_equiv.map_eq_zero_iff
415420

421+
protected lemma continuous (e : M ≃L[R] M₂) : continuous (e : M → M₂) :=
422+
e.continuous_to_fun
423+
424+
protected lemma continuous_on (e : M ≃L[R] M₂) {s : set M} : continuous_on (e : M → M₂) s :=
425+
e.continuous.continuous_on
426+
427+
protected lemma continuous_at (e : M ≃L[R] M₂) {x : M} : continuous_at (e : M → M₂) x :=
428+
e.continuous.continuous_at
429+
430+
protected lemma continuous_within_at (e : M ≃L[R] M₂) {s : set M} {x : M} :
431+
continuous_within_at (e : M → M₂) s x :=
432+
e.continuous.continuous_within_at
433+
434+
lemma comp_continuous_on_iff
435+
{α : Type*} [topological_space α] (e : M ≃L[R] M₂) (f : α → M) (s : set α) :
436+
continuous_on (e ∘ f) s ↔ continuous_on f s :=
437+
e.to_homeomorph.comp_continuous_on_iff _ _
438+
439+
lemma comp_continuous_iff
440+
{α : Type*} [topological_space α] (e : M ≃L[R] M₂) (f : α → M) :
441+
continuous (e ∘ f) ↔ continuous f :=
442+
e.to_homeomorph.comp_continuous_iff _
443+
416444
section
417445
variable (M)
418446

@@ -454,4 +482,18 @@ continuous_linear_map.ext e.apply_symm_apply
454482
(e.symm : M₂ →L[R] M).comp (e : M →L[R] M₂) = continuous_linear_map.id :=
455483
continuous_linear_map.ext e.symm_apply_apply
456484

485+
@[simp] lemma symm_comp_self (e : M ≃L[R] M₂) :
486+
(e.symm : M₂ → M) ∘ (e : M → M₂) = id :=
487+
by{ ext x, exact symm_apply_apply e x }
488+
489+
@[simp] lemma self_comp_symm (e : M ≃L[R] M₂) :
490+
(e : M → M₂) ∘ (e.symm : M₂ → M) = id :=
491+
by{ ext x, exact apply_symm_apply e x }
492+
493+
@[simp] theorem symm_symm (e : M ≃L[R] M₂) : e.symm.symm = e :=
494+
by { ext x, refl }
495+
496+
@[simp] theorem symm_symm_apply (e : M ≃L[R] M₂) (x : M) : e.symm.symm x = e x :=
497+
rfl
498+
457499
end continuous_linear_equiv

src/topology/continuous_on.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,10 @@ lemma continuous_on.congr {f g : α → β} {s : set α} (h : continuous_on f s)
355355
(h' : ∀x ∈ s, g x = f x) : continuous_on g s :=
356356
h.congr_mono h' (subset.refl _)
357357

358+
lemma continuous_on_congr {f g : α → β} {s : set α} (h' : ∀x ∈ s, g x = f x) :
359+
continuous_on g s ↔ continuous_on f s :=
360+
⟨λ h, continuous_on.congr h (λx hx, (h' x hx).symm), λ h, continuous_on.congr h h'⟩
361+
358362
lemma continuous_at.continuous_within_at {f : α → β} {s : set α} {x : α} (h : continuous_at f x) :
359363
continuous_within_at f s x :=
360364
continuous_within_at.mono ((continuous_within_at_univ f x).2 h) (subset_univ _)

src/topology/homeomorph.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,21 @@ def homeomorph_of_continuous_open (e : α ≃ β) (h₁ : continuous e) (h₂ :
110110
end,
111111
.. e }
112112

113+
lemma comp_continuous_on_iff (h : α ≃ₜ β) (f : γ → α) (s : set γ) :
114+
continuous_on (h ∘ f) s ↔ continuous_on f s :=
115+
begin
116+
split,
117+
{ assume H,
118+
have : continuous_on (h.symm ∘ (h ∘ f)) s :=
119+
h.symm.continuous.comp_continuous_on H,
120+
rwa [← function.comp.assoc h.symm h f, symm_comp_self h] at this },
121+
{ exact λ H, h.continuous.comp_continuous_on H }
122+
end
123+
124+
lemma comp_continuous_iff (h : α ≃ₜ β) (f : γ → α) :
125+
continuous (h ∘ f) ↔ continuous f :=
126+
by simp [continuous_iff_continuous_on_univ, comp_continuous_on_iff]
127+
113128
protected lemma quotient_map (h : α ≃ₜ β) : quotient_map h :=
114129
⟨h.to_equiv.surjective, h.coinduced_eq.symm⟩
115130

0 commit comments

Comments
 (0)