-
Notifications
You must be signed in to change notification settings - Fork 259
/
DiffContOnCl.lean
151 lines (116 loc) Β· 7.11 KB
/
DiffContOnCl.lean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/-
Copyright (c) 2022 Yury G. Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury G. Kudryashov
-/
import Mathlib.Analysis.Calculus.Deriv.Inv
import Mathlib.Analysis.NormedSpace.Real
#align_import analysis.calculus.diff_cont_on_cl from "leanprover-community/mathlib"@"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
/-!
# Functions differentiable on a domain and continuous on its closure
Many theorems in complex analysis assume that a function is complex differentiable on a domain and
is continuous on its closure. In this file we define a predicate `DiffContOnCl` that expresses
this property and prove basic facts about this predicate.
-/
open Set Filter Metric
open scoped Topology
variable (π : Type*) {E F G : Type*} [NontriviallyNormedField π] [NormedAddCommGroup E]
[NormedAddCommGroup F] [NormedSpace π E] [NormedSpace π F] [NormedAddCommGroup G]
[NormedSpace π G] {f g : E β F} {s t : Set E} {x : E}
/-- A predicate saying that a function is differentiable on a set and is continuous on its
closure. This is a common assumption in complex analysis. -/
structure DiffContOnCl (f : E β F) (s : Set E) : Prop where
protected differentiableOn : DifferentiableOn π f s
protected continuousOn : ContinuousOn f (closure s)
#align diff_cont_on_cl DiffContOnCl
variable {π}
theorem DifferentiableOn.diffContOnCl (h : DifferentiableOn π f (closure s)) : DiffContOnCl π f s :=
β¨h.mono subset_closure, h.continuousOnβ©
#align differentiable_on.diff_cont_on_cl DifferentiableOn.diffContOnCl
theorem Differentiable.diffContOnCl (h : Differentiable π f) : DiffContOnCl π f s :=
β¨h.differentiableOn, h.continuous.continuousOnβ©
#align differentiable.diff_cont_on_cl Differentiable.diffContOnCl
theorem IsClosed.diffContOnCl_iff (hs : IsClosed s) : DiffContOnCl π f s β DifferentiableOn π f s :=
β¨fun h => h.differentiableOn, fun h => β¨h, hs.closure_eq.symm βΈ h.continuousOnβ©β©
#align is_closed.diff_cont_on_cl_iff IsClosed.diffContOnCl_iff
theorem diffContOnCl_univ : DiffContOnCl π f univ β Differentiable π f :=
isClosed_univ.diffContOnCl_iff.trans differentiableOn_univ
#align diff_cont_on_cl_univ diffContOnCl_univ
theorem diffContOnCl_const {c : F} : DiffContOnCl π (fun _ : E => c) s :=
β¨differentiableOn_const c, continuousOn_constβ©
#align diff_cont_on_cl_const diffContOnCl_const
namespace DiffContOnCl
theorem comp {g : G β E} {t : Set G} (hf : DiffContOnCl π f s) (hg : DiffContOnCl π g t)
(h : MapsTo g t s) : DiffContOnCl π (f β g) t :=
β¨hf.1.comp hg.1 h, hf.2.comp hg.2 <| h.closure_of_continuousOn hg.2β©
#align diff_cont_on_cl.comp DiffContOnCl.comp
theorem continuousOn_ball [NormedSpace β E] {x : E} {r : β} (h : DiffContOnCl π f (ball x r)) :
ContinuousOn f (closedBall x r) := by
rcases eq_or_ne r 0 with (rfl | hr)
Β· rw [closedBall_zero]
exact continuousOn_singleton f x
Β· rw [β closure_ball x hr]
exact h.continuousOn
#align diff_cont_on_cl.continuous_on_ball DiffContOnCl.continuousOn_ball
theorem mk_ball {x : E} {r : β} (hd : DifferentiableOn π f (ball x r))
(hc : ContinuousOn f (closedBall x r)) : DiffContOnCl π f (ball x r) :=
β¨hd, hc.mono <| closure_ball_subset_closedBallβ©
#align diff_cont_on_cl.mk_ball DiffContOnCl.mk_ball
protected theorem differentiableAt (h : DiffContOnCl π f s) (hs : IsOpen s) (hx : x β s) :
DifferentiableAt π f x :=
h.differentiableOn.differentiableAt <| hs.mem_nhds hx
#align diff_cont_on_cl.differentiable_at DiffContOnCl.differentiableAt
theorem differentiableAt' (h : DiffContOnCl π f s) (hx : s β π x) : DifferentiableAt π f x :=
h.differentiableOn.differentiableAt hx
#align diff_cont_on_cl.differentiable_at' DiffContOnCl.differentiableAt'
protected theorem mono (h : DiffContOnCl π f s) (ht : t β s) : DiffContOnCl π f t :=
β¨h.differentiableOn.mono ht, h.continuousOn.mono (closure_mono ht)β©
#align diff_cont_on_cl.mono DiffContOnCl.mono
theorem add (hf : DiffContOnCl π f s) (hg : DiffContOnCl π g s) : DiffContOnCl π (f + g) s :=
β¨hf.1.add hg.1, hf.2.add hg.2β©
#align diff_cont_on_cl.add DiffContOnCl.add
theorem add_const (hf : DiffContOnCl π f s) (c : F) : DiffContOnCl π (fun x => f x + c) s :=
hf.add diffContOnCl_const
#align diff_cont_on_cl.add_const DiffContOnCl.add_const
theorem const_add (hf : DiffContOnCl π f s) (c : F) : DiffContOnCl π (fun x => c + f x) s :=
diffContOnCl_const.add hf
#align diff_cont_on_cl.const_add DiffContOnCl.const_add
theorem neg (hf : DiffContOnCl π f s) : DiffContOnCl π (-f) s :=
β¨hf.1.neg, hf.2.negβ©
#align diff_cont_on_cl.neg DiffContOnCl.neg
theorem sub (hf : DiffContOnCl π f s) (hg : DiffContOnCl π g s) : DiffContOnCl π (f - g) s :=
β¨hf.1.sub hg.1, hf.2.sub hg.2β©
#align diff_cont_on_cl.sub DiffContOnCl.sub
theorem sub_const (hf : DiffContOnCl π f s) (c : F) : DiffContOnCl π (fun x => f x - c) s :=
hf.sub diffContOnCl_const
#align diff_cont_on_cl.sub_const DiffContOnCl.sub_const
theorem const_sub (hf : DiffContOnCl π f s) (c : F) : DiffContOnCl π (fun x => c - f x) s :=
diffContOnCl_const.sub hf
#align diff_cont_on_cl.const_sub DiffContOnCl.const_sub
theorem const_smul {R : Type*} [Semiring R] [Module R F] [SMulCommClass π R F]
[ContinuousConstSMul R F] (hf : DiffContOnCl π f s) (c : R) : DiffContOnCl π (c β’ f) s :=
β¨hf.1.const_smul c, hf.2.const_smul cβ©
#align diff_cont_on_cl.const_smul DiffContOnCl.const_smul
theorem smul {π' : Type*} [NontriviallyNormedField π'] [NormedAlgebra π π'] [NormedSpace π' F]
[IsScalarTower π π' F] {c : E β π'} {f : E β F} {s : Set E} (hc : DiffContOnCl π c s)
(hf : DiffContOnCl π f s) : DiffContOnCl π (fun x => c x β’ f x) s :=
β¨hc.1.smul hf.1, hc.2.smul hf.2β©
#align diff_cont_on_cl.smul DiffContOnCl.smul
theorem smul_const {π' : Type*} [NontriviallyNormedField π'] [NormedAlgebra π π']
[NormedSpace π' F] [IsScalarTower π π' F] {c : E β π'} {s : Set E} (hc : DiffContOnCl π c s)
(y : F) : DiffContOnCl π (fun x => c x β’ y) s :=
hc.smul diffContOnCl_const
#align diff_cont_on_cl.smul_const DiffContOnCl.smul_const
theorem inv {f : E β π} (hf : DiffContOnCl π f s) (hβ : β x β closure s, f x β 0) :
DiffContOnCl π fβ»ΒΉ s :=
β¨differentiableOn_inv.comp hf.1 fun _ hx => hβ _ (subset_closure hx), hf.2.invβ hββ©
#align diff_cont_on_cl.inv DiffContOnCl.inv
end DiffContOnCl
theorem Differentiable.comp_diffContOnCl {g : G β E} {t : Set G} (hf : Differentiable π f)
(hg : DiffContOnCl π g t) : DiffContOnCl π (f β g) t :=
hf.diffContOnCl.comp hg (mapsTo_image _ _)
#align differentiable.comp_diff_cont_on_cl Differentiable.comp_diffContOnCl
theorem DifferentiableOn.diffContOnCl_ball {U : Set E} {c : E} {R : β} (hf : DifferentiableOn π f U)
(hc : closedBall c R β U) : DiffContOnCl π f (ball c R) :=
DiffContOnCl.mk_ball (hf.mono (ball_subset_closedBall.trans hc)) (hf.continuousOn.mono hc)
#align differentiable_on.diff_cont_on_cl_ball DifferentiableOn.diffContOnCl_ball