@@ -280,7 +280,7 @@ derivative of `f` at `x` within `s`, as a continuous linear map from the tangent
280280tangent space at `f x`. -/
281281def mfderiv_within (f : M → M') (s : set M) (x : M) :
282282 tangent_space I x →L[𝕜] tangent_space I' (f x) :=
283- if h : mdifferentiable_within_at I I' f s x then
283+ if mdifferentiable_within_at I I' f s x then
284284(fderiv_within 𝕜 (written_in_ext_chart_at I I' x f) ((ext_chart_at I x).symm ⁻¹' s ∩ range I)
285285 ((ext_chart_at I x) x) : _)
286286else 0
@@ -289,7 +289,7 @@ else 0
289289`f` at `x`, as a continuous linear map from the tangent space at `x` to the tangent space at
290290`f x`. -/
291291def mfderiv (f : M → M') (x : M) : tangent_space I x →L[𝕜] tangent_space I' (f x) :=
292- if h : mdifferentiable_at I I' f x then
292+ if mdifferentiable_at I I' f x then
293293(fderiv_within 𝕜 (written_in_ext_chart_at I I' x f : E → E') (range I)
294294 ((ext_chart_at I x) x) : _)
295295else 0
@@ -431,11 +431,11 @@ lemma mdifferentiable_within_at_iff_of_mem_source
431431
432432lemma mfderiv_within_zero_of_not_mdifferentiable_within_at
433433 (h : ¬ mdifferentiable_within_at I I' f s x) : mfderiv_within I I' f s x = 0 :=
434- by simp only [mfderiv_within, h, dif_neg , not_false_iff]
434+ by simp only [mfderiv_within, h, if_neg , not_false_iff]
435435
436436lemma mfderiv_zero_of_not_mdifferentiable_at
437437 (h : ¬ mdifferentiable_at I I' f x) : mfderiv I I' f x = 0 :=
438- by simp only [mfderiv, h, dif_neg , not_false_iff]
438+ by simp only [mfderiv, h, if_neg , not_false_iff]
439439
440440theorem has_mfderiv_within_at.mono (h : has_mfderiv_within_at I I' f t x f') (hst : s ⊆ t) :
441441 has_mfderiv_within_at I I' f s x f' :=
@@ -504,28 +504,28 @@ lemma mdifferentiable_within_at.has_mfderiv_within_at (h : mdifferentiable_withi
504504 has_mfderiv_within_at I I' f s x (mfderiv_within I I' f s x) :=
505505begin
506506 refine ⟨h.1 , _⟩,
507- simp only [mfderiv_within, h, dif_pos ] with mfld_simps,
507+ simp only [mfderiv_within, h, if_pos ] with mfld_simps,
508508 exact differentiable_within_at.has_fderiv_within_at h.2
509509end
510510
511511lemma mdifferentiable_within_at.mfderiv_within (h : mdifferentiable_within_at I I' f s x) :
512512 (mfderiv_within I I' f s x) =
513513 fderiv_within 𝕜 (written_in_ext_chart_at I I' x f : _) ((ext_chart_at I x).symm ⁻¹' s ∩ range I)
514514 ((ext_chart_at I x) x) :=
515- by simp only [mfderiv_within, h, dif_pos ]
515+ by simp only [mfderiv_within, h, if_pos ]
516516
517517lemma mdifferentiable_at.has_mfderiv_at (h : mdifferentiable_at I I' f x) :
518518 has_mfderiv_at I I' f x (mfderiv I I' f x) :=
519519begin
520520 refine ⟨h.1 , _⟩,
521- simp only [mfderiv, h, dif_pos ] with mfld_simps,
521+ simp only [mfderiv, h, if_pos ] with mfld_simps,
522522 exact differentiable_within_at.has_fderiv_within_at h.2
523523end
524524
525525lemma mdifferentiable_at.mfderiv (h : mdifferentiable_at I I' f x) :
526526 (mfderiv I I' f x) =
527527 fderiv_within 𝕜 (written_in_ext_chart_at I I' x f : _) (range I) ((ext_chart_at I x) x) :=
528- by simp only [mfderiv, h, dif_pos ]
528+ by simp only [mfderiv, h, if_pos ]
529529
530530lemma has_mfderiv_at.mfderiv (h : has_mfderiv_at I I' f x f') :
531531 mfderiv I I' f x = f' :=
@@ -778,7 +778,7 @@ begin
778778 by_cases h : mdifferentiable_within_at I I' f s x,
779779 { exact ((h.has_mfderiv_within_at).congr_of_eventually_eq hL hx).mfderiv_within hs },
780780 { unfold mfderiv_within,
781- rw [dif_neg h, dif_neg ],
781+ rw [if_neg h, if_neg ],
782782 rwa ← hL.mdifferentiable_within_at_iff I I' hx }
783783end
784784
@@ -1037,8 +1037,8 @@ alias mdifferentiable_iff_differentiable ↔
10371037 mfderiv_within (𝓘(𝕜, E)) (𝓘(𝕜, E')) f s x = fderiv_within 𝕜 f s x :=
10381038begin
10391039 by_cases h : mdifferentiable_within_at (𝓘(𝕜, E)) (𝓘(𝕜, E')) f s x,
1040- { simp only [mfderiv_within, h, dif_pos ] with mfld_simps },
1041- { simp only [mfderiv_within, h, dif_neg , not_false_iff],
1040+ { simp only [mfderiv_within, h, if_pos ] with mfld_simps },
1041+ { simp only [mfderiv_within, h, if_neg , not_false_iff],
10421042 rw [mdifferentiable_within_at_iff_differentiable_within_at] at h,
10431043 exact (fderiv_within_zero_of_not_differentiable_within_at h).symm }
10441044end
@@ -1236,10 +1236,8 @@ Note that in the in `has_mfderiv_at` lemmas there is an abuse of the defeq betwe
12361236canonical, but in this case (the tangent space of a vector space) it is canonical.
12371237 -/
12381238
1239- variables { z : M} {F' : Type *} [normed_comm_ring F'] [normed_algebra 𝕜 F']
1240- {f g : M → E'} {p q : M → F'} {I}
1241- {f' g' : tangent_space I z →L[𝕜] E'}
1242- {p' q' : tangent_space I z →L[𝕜] F'}
1239+ section group
1240+ variables {I} {z : M} {f g : M → E'} {f' g' : tangent_space I z →L[𝕜] E'}
12431241
12441242lemma has_mfderiv_at.add (hf : has_mfderiv_at I 𝓘(𝕜, E') f z f')
12451243 (hg : has_mfderiv_at I 𝓘(𝕜, E') g z g') : has_mfderiv_at I 𝓘(𝕜, E') (f + g) z (f' + g') :=
@@ -1253,18 +1251,11 @@ lemma mdifferentiable.add (hf : mdifferentiable I 𝓘(𝕜, E') f) (hg : mdiffe
12531251 mdifferentiable I 𝓘(𝕜, E') (f + g) :=
12541252λ x, (hf x).add (hg x)
12551253
1256- lemma has_mfderiv_at.mul (hp : has_mfderiv_at I 𝓘(𝕜, F') p z p')
1257- (hq : has_mfderiv_at I 𝓘(𝕜, F') q z q') :
1258- has_mfderiv_at I 𝓘(𝕜, F') (p * q) z (p z • q' + q z • p' : E →L[𝕜] F') :=
1259- ⟨hp.1 .mul hq.1 , by simpa only with mfld_simps using hp.2 .mul hq.2 ⟩
1260-
1261- lemma mdifferentiable_at.mul (hp : mdifferentiable_at I 𝓘(𝕜, F') p z)
1262- (hq : mdifferentiable_at I 𝓘(𝕜, F') q z) : mdifferentiable_at I 𝓘(𝕜, F') (p * q) z :=
1263- (hp.has_mfderiv_at.mul hq.has_mfderiv_at).mdifferentiable_at
1264-
1265- lemma mdifferentiable.mul {f g : M → F'} (hf : mdifferentiable I 𝓘(𝕜, F') f)
1266- (hg : mdifferentiable I 𝓘(𝕜, F') g) : mdifferentiable I 𝓘(𝕜, F') (f * g) :=
1267- λ x, (hf x).mul (hg x)
1254+ lemma mfderiv_add (hf : mdifferentiable_at I 𝓘(𝕜, E') f z)
1255+ (hg : mdifferentiable_at I 𝓘(𝕜, E') g z) :
1256+ (mfderiv I 𝓘(𝕜, E') (f + g) z : tangent_space I z →L[𝕜] E') =
1257+ (mfderiv I 𝓘(𝕜, E') f z + mfderiv I 𝓘(𝕜, E') g z : tangent_space I z →L[𝕜] E') :=
1258+ (hf.has_mfderiv_at.add hg.has_mfderiv_at).mfderiv
12681259
12691260lemma has_mfderiv_at.const_smul (hf : has_mfderiv_at I 𝓘(𝕜, E') f z f') (s : 𝕜) :
12701261 has_mfderiv_at I 𝓘(𝕜, E') (s • f) z (s • f') :=
@@ -1274,22 +1265,45 @@ lemma mdifferentiable_at.const_smul (hf : mdifferentiable_at I 𝓘(𝕜, E') f
12741265 mdifferentiable_at I 𝓘(𝕜, E') (s • f) z :=
12751266(hf.has_mfderiv_at.const_smul s).mdifferentiable_at
12761267
1277- lemma mdifferentiable.const_smul {f : M → E'} (s : 𝕜) (hf : mdifferentiable I 𝓘(𝕜, E') f) :
1268+ lemma mdifferentiable.const_smul (s : 𝕜) (hf : mdifferentiable I 𝓘(𝕜, E') f) :
12781269 mdifferentiable I 𝓘(𝕜, E') (s • f) :=
12791270λ x, (hf x).const_smul s
12801271
1272+ lemma const_smul_mfderiv (hf : mdifferentiable_at I 𝓘(𝕜, E') f z) (s : 𝕜) :
1273+ (mfderiv I 𝓘(𝕜, E') (s • f) z : tangent_space I z →L[𝕜] E') =
1274+ (s • mfderiv I 𝓘(𝕜, E') f z : tangent_space I z →L[𝕜] E') :=
1275+ (hf.has_mfderiv_at.const_smul s).mfderiv
1276+
12811277lemma has_mfderiv_at.neg (hf : has_mfderiv_at I 𝓘(𝕜, E') f z f') :
12821278 has_mfderiv_at I 𝓘(𝕜, E') (-f) z (-f') :=
12831279⟨hf.1 .neg, hf.2 .neg⟩
12841280
1281+ lemma has_mfderiv_at_neg :
1282+ has_mfderiv_at I 𝓘(𝕜, E') (-f) z (-f') ↔ has_mfderiv_at I 𝓘(𝕜, E') f z f' :=
1283+ ⟨λ hf, by { convert hf.neg; rw [neg_neg] }, λ hf, hf.neg⟩
1284+
12851285lemma mdifferentiable_at.neg (hf : mdifferentiable_at I 𝓘(𝕜, E') f z) :
12861286 mdifferentiable_at I 𝓘(𝕜, E') (-f) z :=
12871287hf.has_mfderiv_at.neg.mdifferentiable_at
12881288
1289- lemma mdifferentiable.neg {f : M → E'} (hf : mdifferentiable I 𝓘(𝕜, E') f) :
1289+ lemma mdifferentiable_at_neg :
1290+ mdifferentiable_at I 𝓘(𝕜, E') (-f) z ↔ mdifferentiable_at I 𝓘(𝕜, E') f z :=
1291+ ⟨λ hf, by { convert hf.neg; rw [neg_neg] }, λ hf, hf.neg⟩
1292+
1293+ lemma mdifferentiable.neg (hf : mdifferentiable I 𝓘(𝕜, E') f) :
12901294 mdifferentiable I 𝓘(𝕜, E') (-f) :=
12911295λ x, (hf x).neg
12921296
1297+ lemma mfderiv_neg (f : M → E') (x : M) :
1298+ (mfderiv I 𝓘(𝕜, E') (-f) x : tangent_space I x →L[𝕜] E') =
1299+ (- mfderiv I 𝓘(𝕜, E') f x : tangent_space I x →L[𝕜] E') :=
1300+ begin
1301+ simp_rw [mfderiv],
1302+ by_cases hf : mdifferentiable_at I 𝓘(𝕜, E') f x,
1303+ { exact hf.has_mfderiv_at.neg.mfderiv },
1304+ { rw [if_neg hf], rw [← mdifferentiable_at_neg] at hf, rw [if_neg hf, neg_zero] },
1305+ end
1306+
12931307lemma has_mfderiv_at.sub (hf : has_mfderiv_at I 𝓘(𝕜, E') f z f')
12941308 (hg : has_mfderiv_at I 𝓘(𝕜, E') g z g') : has_mfderiv_at I 𝓘(𝕜, E') (f - g) z (f'- g') :=
12951309⟨hf.1 .sub hg.1 , hf.2 .sub hg.2 ⟩
@@ -1298,10 +1312,67 @@ lemma mdifferentiable_at.sub (hf : mdifferentiable_at I 𝓘(𝕜, E') f z)
12981312 (hg : mdifferentiable_at I 𝓘(𝕜, E') g z) : mdifferentiable_at I 𝓘(𝕜, E') (f - g) z :=
12991313(hf.has_mfderiv_at.sub hg.has_mfderiv_at).mdifferentiable_at
13001314
1301- lemma mdifferentiable.sub {f : M → E'} (hf : mdifferentiable I 𝓘(𝕜, E') f)
1315+ lemma mdifferentiable.sub (hf : mdifferentiable I 𝓘(𝕜, E') f)
13021316 (hg : mdifferentiable I 𝓘(𝕜, E') g) : mdifferentiable I 𝓘(𝕜, E') (f - g) :=
13031317λ x, (hf x).sub (hg x)
13041318
1319+ lemma mfderiv_sub (hf : mdifferentiable_at I 𝓘(𝕜, E') f z)
1320+ (hg : mdifferentiable_at I 𝓘(𝕜, E') g z) :
1321+ (mfderiv I 𝓘(𝕜, E') (f - g) z : tangent_space I z →L[𝕜] E') =
1322+ (mfderiv I 𝓘(𝕜, E') f z - mfderiv I 𝓘(𝕜, E') g z : tangent_space I z →L[𝕜] E') :=
1323+ (hf.has_mfderiv_at.sub hg.has_mfderiv_at).mfderiv
1324+
1325+ end group
1326+
1327+ section algebra_over_ring
1328+ variables {I} {z : M} {F' : Type *} [normed_ring F'] [normed_algebra 𝕜 F']
1329+ {p q : M → F'} {p' q' : tangent_space I z →L[𝕜] F'}
1330+
1331+ lemma has_mfderiv_within_at.mul' (hp : has_mfderiv_within_at I 𝓘(𝕜, F') p s z p')
1332+ (hq : has_mfderiv_within_at I 𝓘(𝕜, F') q s z q') :
1333+ has_mfderiv_within_at I 𝓘(𝕜, F') (p * q) s z (p z • q' + p'.smul_right (q z) : E →L[𝕜] F') :=
1334+ ⟨hp.1 .mul hq.1 , by simpa only with mfld_simps using hp.2 .mul' hq.2 ⟩
1335+
1336+ lemma has_mfderiv_at.mul' (hp : has_mfderiv_at I 𝓘(𝕜, F') p z p')
1337+ (hq : has_mfderiv_at I 𝓘(𝕜, F') q z q') :
1338+ has_mfderiv_at I 𝓘(𝕜, F') (p * q) z (p z • q' + p'.smul_right (q z) : E →L[𝕜] F') :=
1339+ has_mfderiv_within_at_univ.mp $ hp.has_mfderiv_within_at.mul' hq.has_mfderiv_within_at
1340+
1341+ lemma mdifferentiable_within_at.mul (hp : mdifferentiable_within_at I 𝓘(𝕜, F') p s z)
1342+ (hq : mdifferentiable_within_at I 𝓘(𝕜, F') q s z) :
1343+ mdifferentiable_within_at I 𝓘(𝕜, F') (p * q) s z :=
1344+ (hp.has_mfderiv_within_at.mul' hq.has_mfderiv_within_at).mdifferentiable_within_at
1345+
1346+ lemma mdifferentiable_at.mul (hp : mdifferentiable_at I 𝓘(𝕜, F') p z)
1347+ (hq : mdifferentiable_at I 𝓘(𝕜, F') q z) : mdifferentiable_at I 𝓘(𝕜, F') (p * q) z :=
1348+ (hp.has_mfderiv_at.mul' hq.has_mfderiv_at).mdifferentiable_at
1349+
1350+ lemma mdifferentiable_on.mul (hp : mdifferentiable_on I 𝓘(𝕜, F') p s)
1351+ (hq : mdifferentiable_on I 𝓘(𝕜, F') q s) : mdifferentiable_on I 𝓘(𝕜, F') (p * q) s :=
1352+ λ x hx, (hp x hx).mul $ hq x hx
1353+
1354+ lemma mdifferentiable.mul (hp : mdifferentiable I 𝓘(𝕜, F') p)
1355+ (hq : mdifferentiable I 𝓘(𝕜, F') q) : mdifferentiable I 𝓘(𝕜, F') (p * q) :=
1356+ λ x, (hp x).mul (hq x)
1357+
1358+ end algebra_over_ring
1359+
1360+ section algebra_over_comm_ring
1361+ variables {I} {z : M} {F' : Type *} [normed_comm_ring F'] [normed_algebra 𝕜 F']
1362+ {p q : M → F'} {p' q' : tangent_space I z →L[𝕜] F'}
1363+
1364+ lemma has_mfderiv_within_at.mul (hp : has_mfderiv_within_at I 𝓘(𝕜, F') p s z p')
1365+ (hq : has_mfderiv_within_at I 𝓘(𝕜, F') q s z q') :
1366+ has_mfderiv_within_at I 𝓘(𝕜, F') (p * q) s z (p z • q' + q z • p' : E →L[𝕜] F') :=
1367+ by { convert hp.mul' hq, ext z, apply mul_comm }
1368+
1369+ lemma has_mfderiv_at.mul (hp : has_mfderiv_at I 𝓘(𝕜, F') p z p')
1370+ (hq : has_mfderiv_at I 𝓘(𝕜, F') q z q') :
1371+ has_mfderiv_at I 𝓘(𝕜, F') (p * q) z (p z • q' + q z • p' : E →L[𝕜] F') :=
1372+ has_mfderiv_within_at_univ.mp $ hp.has_mfderiv_within_at.mul hq.has_mfderiv_within_at
1373+
1374+ end algebra_over_comm_ring
1375+
13051376end arithmetic
13061377
13071378namespace model_with_corners
0 commit comments