@@ -395,6 +395,10 @@ lemma differentiable_at.differentiable_within_at
395
395
(h : differentiable_at 𝕜 f x) : differentiable_within_at 𝕜 f s x :=
396
396
(differentiable_within_at_univ.2 h).mono (subset_univ _)
397
397
398
+ lemma differentiable.differentiable_at (h : differentiable 𝕜 f) :
399
+ differentiable_at 𝕜 f x :=
400
+ h x
401
+
398
402
lemma differentiable_within_at.differentiable_at
399
403
(h : differentiable_within_at 𝕜 f s x) (hs : s ∈ 𝓝 x) : differentiable_at 𝕜 f x :=
400
404
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)
435
439
begin
436
440
ext x : 1 ,
437
441
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 ,
439
443
rw has_fderiv_within_at_univ,
440
444
apply h.has_fderiv_at },
441
445
{ have : ¬ differentiable_within_at 𝕜 f univ x,
@@ -512,6 +516,11 @@ lemma differentiable_on.congr (h : differentiable_on 𝕜 f s) (h' : ∀x ∈ s,
512
516
differentiable_on 𝕜 f₁ s :=
513
517
λ x hx, (h x hx).congr h' (h' x hx)
514
518
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
+
515
524
lemma differentiable_at.congr_of_mem_nhds (h : differentiable_at 𝕜 f x)
516
525
(hL : ∀ᶠ y in 𝓝 x, f₁ y = f y) : differentiable_at 𝕜 f₁ x :=
517
526
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 :=
622
631
lemma differentiable_within_at_const (c : F) : differentiable_within_at 𝕜 (λx, c) s x :=
623
632
differentiable_at.differentiable_within_at (differentiable_at_const _)
624
633
625
- lemma fderiv_const (c : F) : fderiv 𝕜 (λy, c) x = 0 :=
634
+ lemma fderiv_const_apply (c : F) : fderiv 𝕜 (λy, c) x = 0 :=
626
635
has_fderiv_at.fderiv (has_fderiv_at_const c x)
627
636
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) :
629
641
fderiv_within 𝕜 (λy, c) s x = 0 :=
630
642
begin
631
643
rw differentiable_at.fderiv_within (differentiable_at_const _) hxs,
632
- exact fderiv_const _
644
+ exact fderiv_const_apply _
633
645
end
634
646
635
647
lemma differentiable_const (c : F) : differentiable 𝕜 (λx : E, c) :=
705
717
protected lemma continuous_linear_map.has_fderiv_within_at : has_fderiv_within_at e e s x :=
706
718
e.has_fderiv_at_filter
707
719
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 :=
709
721
e.has_fderiv_at_filter
710
722
711
723
protected lemma continuous_linear_map.differentiable_at : differentiable_at 𝕜 e x :=
@@ -1363,24 +1375,37 @@ lemma differentiable_at.comp {g : F → G}
1363
1375
differentiable_at 𝕜 (g ∘ f) x :=
1364
1376
(hg.has_fderiv_at.comp x hf.has_fderiv_at).differentiable_at
1365
1377
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
+
1366
1383
lemma fderiv_within.comp {g : F → G} {t : set F}
1367
1384
(hg : differentiable_within_at 𝕜 g t (f x)) (hf : differentiable_within_at 𝕜 f s x)
1368
1385
(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) :=
1371
1387
begin
1372
1388
apply has_fderiv_within_at.fderiv_within _ hxs,
1373
1389
exact has_fderiv_within_at.comp x (hg.has_fderiv_within_at) (hf.has_fderiv_within_at) h
1374
1390
end
1375
1391
1376
1392
lemma fderiv.comp {g : F → G}
1377
1393
(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) :=
1379
1395
begin
1380
1396
apply has_fderiv_at.fderiv,
1381
1397
exact has_fderiv_at.comp x hg.has_fderiv_at hf.has_fderiv_at
1382
1398
end
1383
1399
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
+
1384
1409
lemma differentiable_on.comp {g : F → G} {t : set F}
1385
1410
(hg : differentiable_on 𝕜 g t) (hf : differentiable_on 𝕜 f s) (st : s ⊆ f ⁻¹' t) :
1386
1411
differentiable_on 𝕜 (g ∘ f) s :=
@@ -1390,6 +1415,11 @@ lemma differentiable.comp {g : F → G} (hg : differentiable 𝕜 g) (hf : diffe
1390
1415
differentiable 𝕜 (g ∘ f) :=
1391
1416
λx, differentiable_at.comp x (hg (f x)) (hf x)
1392
1417
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
+
1393
1423
end composition
1394
1424
1395
1425
section smul
@@ -1626,6 +1656,122 @@ lemma fderiv_const_mul (hc : differentiable_at 𝕜 c x) (d : 𝕜) :
1626
1656
1627
1657
end mul
1628
1658
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
+
1629
1775
end
1630
1776
1631
1777
section
@@ -1726,6 +1872,27 @@ begin
1726
1872
rw [this , closure_univ]
1727
1873
end
1728
1874
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
+
1729
1896
end tangent_cone
1730
1897
1731
1898
section restrict_scalars
0 commit comments