-- Mathlib/Geometry/Manifold/ContMDiffMFDeriv.lean
𝕜 : Type u_1
inst✝²⁴ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝²³ : NormedAddCommGroup E
inst✝²² : NormedSpace 𝕜 E
H : Type u_3
inst✝²¹ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝²⁰ : TopologicalSpace M
inst✝¹⁹ : ChartedSpace H M
Is : SmoothManifoldWithCorners I M
E' : Type u_5
inst✝¹⁸ : NormedAddCommGroup E'
inst✝¹⁷ : NormedSpace 𝕜 E'
H' : Type u_6
inst✝¹⁶ : TopologicalSpace H'
I' : ModelWithCorners 𝕜 E' H'
M' : Type u_7
inst✝¹⁵ : TopologicalSpace M'
inst✝¹⁴ : ChartedSpace H' M'
I's : SmoothManifoldWithCorners I' M'
F : Type u_8
inst✝¹³ : NormedAddCommGroup F
inst✝¹² : NormedSpace 𝕜 F
G : Type u_9
inst✝¹¹ : TopologicalSpace G
J : ModelWithCorners 𝕜 F G
N : Type u_10
inst✝¹⁰ : TopologicalSpace N
inst✝⁹ : ChartedSpace G N
Js : SmoothManifoldWithCorners J N
F' : Type u_11
inst✝⁸ : NormedAddCommGroup F'
inst✝⁷ : NormedSpace 𝕜 F'
G' : Type u_12
inst✝⁶ : TopologicalSpace G'
J' : ModelWithCorners 𝕜 F' G'
N' : Type u_13
inst✝⁵ : TopologicalSpace N'
inst✝⁴ : ChartedSpace G' N'
J's : SmoothManifoldWithCorners J' N'
F₁ : Type u_14
inst✝³ : NormedAddCommGroup F₁
inst✝² : NormedSpace 𝕜 F₁
F₂ : Type u_15
inst✝¹ : NormedAddCommGroup F₂
inst✝ : NormedSpace 𝕜 F₂
f✝ f₁ : M → M'
s s₁ t : Set M
x✝ : M
m n : ℕ∞
x₀ : N
f : N → M → M'
g : N → M
hf : ContMDiffAt (J.prod I) I' n (uncurry f) (x₀, g x₀)
hg : ContMDiffAt J I m g x₀
hmn : m + 1 ≤ n
h4f✝ : ContinuousAt (fun x => f x (g x)) x₀
h4f : (fun x => f x (g x)) ⁻¹' (extChartAt I' (f x₀ (g x₀))).source ∈ 𝓝 x₀
h3f : ∀ᶠ (x' : N × M) in 𝓝 (x₀, g x₀), ContMDiffAt (J.prod I) I' (↑One.one) (uncurry f) x'
h2f : ∀ᶠ (x₂ : N) in 𝓝 x₀, ContMDiffAt I I' 1 (f x₂) (g x₂)
h2g : g ⁻¹' (extChartAt I (g x₀)).source ∈ 𝓝 x₀
this✝² : ContDiffWithinAt 𝕜 m (fun x => fderivWithin 𝕜 (↑(extChartAt I' (f x₀ (g x₀))) ∘ f (↑(extChartAt J x₀).symm x) ∘ ↑(extChartAt I (g x₀)).symm) (range ↑I) (↑(extChartAt I (g x₀)) (g (↑(extChartAt J x₀).symm x)))) (range ↑J) (↑(extChartAt J x₀) x₀)
this✝¹ : ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') m (fun x => fderivWithin 𝕜 (↑(extChartAt I' (f x₀ (g x₀))) ∘ f x ∘ ↑(extChartAt I (g x₀)).symm) (range ↑I) (↑(extChartAt I (g x₀)) (g x))) x₀
this✝ : ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') m (fun x => fderivWithin 𝕜 (↑(extChartAt I' (f x₀ (g x₀))) ∘ ↑(extChartAt I' (f x (g x))).symm ∘ writtenInExtChartAt I I' (g x) (f x) ∘ ↑(extChartAt I (g x)) ∘ ↑(extChartAt I (g x₀)).symm) (range ↑I) (↑(extChartAt I (g x₀)) (g x))) x₀
_inst✝ : (x : N) → NormedAddCommGroup (TangentSpace I (g x)) := fun x => inferInstanceAs (NormedAddCommGroup E)
_inst : (x : N) → NormedSpace 𝕜 (TangentSpace I (g x)) := fun x => inferInstanceAs (NormedSpace 𝕜 E)
this : ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') m (fun x => (fderivWithin 𝕜 (↑(extChartAt I' (f x₀ (g x₀))) ∘ ↑(extChartAt I' (f x (g x))).symm) (range ↑I') (↑(extChartAt I' (f x (g x))) (f x (g x)))).comp ((mfderiv I I' (f x) (g x)).comp (fderivWithin 𝕜 (↑(extChartAt I (g x)) ∘ ↑(extChartAt I (g x₀)).symm) (range ↑I) (↑(extChartAt I (g x₀)) (g x))))) x₀
x : N
hx : x ∈ g ⁻¹' (extChartAt I (g x₀)).source
h2x : x ∈ (fun x => f x (g x)) ⁻¹' (extChartAt I' (f x₀ (g x₀))).source

⊢ ((tangentBundleCore I' M').coordChange (achart H' (f x (g x))) (achart H' (f x₀ (g x₀))) (f x (g x))).comp ((mfderiv I I' (f x) (g x)).comp ((tangentBundleCore I M).coordChange (achart H (g x₀)) (achart H (g x)) (g x))) = (fderivWithin 𝕜 (↑(extChartAt I' (f x₀ (g x₀))) ∘ ↑(extChartAt I' (f x (g x))).symm) (range ↑I') (↑(extChartAt I' (f x (g x))) (f x (g x)))).comp ((mfderiv I I' (f x) (g x)).comp (fderivWithin 𝕜 (↑(extChartAt I (g x)) ∘ ↑(extChartAt I (g x₀)).symm) (range ↑I) (↑(extChartAt I (g x₀)) (g x))))