l3lab/ntp-mathlib huggingface dataset:
/-- The derivative of the inverse of the chart at a base point is the inverse of the chart of the
tangent bundle, composed with the identification between the tangent bundle of the model space and
the product space. -/
theorem tangentMap_chart_symm {p : TangentBundle I M} {q : TangentBundle I H}
    (h : q.1 ∈ (chartAt H p.1).target) :
    tangentMap I I (chartAt H p.1).symm q =
      (chartAt (ModelProd H E) p).symm (TotalSpace.toProd H E q) := by
  dsimp only [tangentMap]
  rw [MDifferentiableAt.mfderiv (mdifferentiableAt_atlas_symm _ (chart_mem_atlas _ _) h)]
  simp only [ContinuousLinearMap.coe_coe, TangentBundle.chartAt, h, tangentBundleCore,
    mfld_simps, (· ∘ ·)]
  -- `simp` fails to apply `PartialEquiv.prod_symm` with `ModelProd`
  congr
  

Proof state:
case e_snd.e_a.e_x.e_a
𝕜 : 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
inst✝¹² : 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'
inst✝⁶ : SmoothManifoldWithCorners I' M'
E'' : Type u_8
inst✝⁵ : NormedAddCommGroup E''
inst✝⁴ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝³ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝² : TopologicalSpace M''
inst✝¹ : ChartedSpace H'' M''
inst✝ : SmoothManifoldWithCorners I'' M''
s : Set M
x : M
e : PartialHomeomorph M H
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).toPartialEquiv.target
⊢ q.proj =
    ↑↑(achart H p.proj)
      (↑(PartialHomeomorph.symm (PartialHomeomorph.prod (chartAt H p.proj) (PartialHomeomorph.refl E)))
          (q.proj, q.snd)).1

Next tactic:
exact ((chartAt H (TotalSpace.proj p)).right_inv h).symm
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
⊢ ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x) =
    ContinuousLinearMap.id 𝕜 (TangentSpace I x)

Next tactic:
have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
  

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
this :
  mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x =
    ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x)
⊢ ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x) =
    ContinuousLinearMap.id 𝕜 (TangentSpace I x)

Next tactic:
rw [← this]
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
  rw [← this]
  

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
this :
  mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x =
    ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x)
⊢ mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x = ContinuousLinearMap.id 𝕜 (TangentSpace I x)

Next tactic:
have : mfderiv I I (_root_.id : M → M) x = ContinuousLinearMap.id _ _ := mfderiv_id I
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
  rw [← this]
  have : mfderiv I I (_root_.id : M → M) x = ContinuousLinearMap.id _ _ := mfderiv_id I
  

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
this✝ :
  mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x =
    ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x)
this : mfderiv I I id x = ContinuousLinearMap.id 𝕜 (TangentSpace I x)
⊢ mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x = ContinuousLinearMap.id 𝕜 (TangentSpace I x)

Next tactic:
rw [← this]
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
  rw [← this]
  have : mfderiv I I (_root_.id : M → M) x = ContinuousLinearMap.id _ _ := mfderiv_id I
  rw [← this]
  

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
this✝ :
  mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x =
    ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x)
this : mfderiv I I id x = ContinuousLinearMap.id 𝕜 (TangentSpace I x)
⊢ mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x = mfderiv I I id x

Next tactic:
apply Filter.EventuallyEq.mfderiv_eq
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
  rw [← this]
  have : mfderiv I I (_root_.id : M → M) x = ContinuousLinearMap.id _ _ := mfderiv_id I
  rw [← this]
  apply Filter.EventuallyEq.mfderiv_eq
  

Proof state:
case hL
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
this✝ :
  mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x =
    ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x)
this : mfderiv I I id x = ContinuousLinearMap.id 𝕜 (TangentSpace I x)
⊢ ↑(PartialHomeomorph.symm e) ∘ ↑e =ᶠ[𝓝 x] id

Next tactic:
have : e.source ∈ 𝓝 x := IsOpen.mem_nhds e.open_source hx
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
  rw [← this]
  have : mfderiv I I (_root_.id : M → M) x = ContinuousLinearMap.id _ _ := mfderiv_id I
  rw [← this]
  apply Filter.EventuallyEq.mfderiv_eq
  have : e.source ∈ 𝓝 x := IsOpen.mem_nhds e.open_source hx
  

Proof state:
case hL
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
this✝¹ :
  mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x =
    ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x)
this✝ : mfderiv I I id x = ContinuousLinearMap.id 𝕜 (TangentSpace I x)
this : e.source ∈ 𝓝 x
⊢ ↑(PartialHomeomorph.symm e) ∘ ↑e =ᶠ[𝓝 x] id

Next tactic:
exact Filter.mem_of_superset this (by mfld_set_tac)
theorem symm_comp_deriv {x : M} (hx : x ∈ e.source) :
    (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) =
      ContinuousLinearMap.id 𝕜 (TangentSpace I x) := by
  have : mfderiv I I (e.symm ∘ e) x = (mfderiv I' I e.symm (e x)).comp (mfderiv I I' e x) :=
    mfderiv_comp x (he.mdifferentiableAt_symm (e.map_source hx)) (he.mdifferentiableAt hx)
  rw [← this]
  have : mfderiv I I (_root_.id : M → M) x = ContinuousLinearMap.id _ _ := mfderiv_id I
  rw [← this]
  apply Filter.EventuallyEq.mfderiv_eq
  have : e.source ∈ 𝓝 x := IsOpen.mem_nhds e.open_source hx
  exact Filter.mem_of_superset this (by 

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
this✝¹ :
  mfderiv I I (↑(PartialHomeomorph.symm e) ∘ ↑e) x =
    ContinuousLinearMap.comp (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (mfderiv I I' (↑e) x)
this✝ : mfderiv I I id x = ContinuousLinearMap.id 𝕜 (TangentSpace I x)
this : e.source ∈ 𝓝 x
⊢ e.source ⊆ {x | (fun x => (↑(PartialHomeomorph.symm e) ∘ ↑e) x = id x) x}

Next tactic:
mfld_set_tac
/-- The derivative of a differentiable local homeomorphism, as a continuous linear equivalence
between the tangent spaces at `x` and `e x`. -/
protected def mfderiv {x : M} (hx : x ∈ e.source) : TangentSpace I x ≃L[𝕜] TangentSpace I' (e x) :=
  { mfderiv I I' e x with
    invFun := mfderiv I' I e.symm (e x)
    continuous_toFun := (mfderiv I I' e x).cont
    continuous_invFun := (mfderiv I' I e.symm (e x)).cont
    left_inv := fun y => by
      

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
src✝ : TangentSpace I x →L[𝕜] TangentSpace I' (↑e x) := mfderiv I I' (↑e) x
y : TangentSpace I x
⊢ (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (AddHom.toFun src✝.toAddHom y) = y

Next tactic:
have : (ContinuousLinearMap.id _ _ : TangentSpace I x →L[𝕜] TangentSpace I x) y = y := rfl
/-- The derivative of a differentiable local homeomorphism, as a continuous linear equivalence
between the tangent spaces at `x` and `e x`. -/
protected def mfderiv {x : M} (hx : x ∈ e.source) : TangentSpace I x ≃L[𝕜] TangentSpace I' (e x) :=
  { mfderiv I I' e x with
    invFun := mfderiv I' I e.symm (e x)
    continuous_toFun := (mfderiv I I' e x).cont
    continuous_invFun := (mfderiv I' I e.symm (e x)).cont
    left_inv := fun y => by
      have : (ContinuousLinearMap.id _ _ : TangentSpace I x →L[𝕜] TangentSpace I x) y = y := rfl
      

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
src✝ : TangentSpace I x →L[𝕜] TangentSpace I' (↑e x) := mfderiv I I' (↑e) x
y : TangentSpace I x
this : (ContinuousLinearMap.id 𝕜 (TangentSpace I x)) y = y
⊢ (mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) (AddHom.toFun src✝.toAddHom y) = y

Next tactic:
conv_rhs => rw [← this, ← he.symm_comp_deriv hx]
/-- The derivative of a differentiable local homeomorphism, as a continuous linear equivalence
between the tangent spaces at `x` and `e x`. -/
protected def mfderiv {x : M} (hx : x ∈ e.source) : TangentSpace I x ≃L[𝕜] TangentSpace I' (e x) :=
  { mfderiv I I' e x with
    invFun := mfderiv I' I e.symm (e x)
    continuous_toFun := (mfderiv I I' e x).cont
    continuous_invFun := (mfderiv I' I e.symm (e x)).cont
    left_inv := fun y => by
      have : (ContinuousLinearMap.id _ _ : TangentSpace I x →L[𝕜] TangentSpace I x) y = y := rfl
      conv_rhs => 

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
src✝ : TangentSpace I x →L[𝕜] TangentSpace I' (↑e x) := mfderiv I I' (↑e) x
y : TangentSpace I x
this : (ContinuousLinearMap.id 𝕜 (TangentSpace I x)) y = y
| y

Next tactic:
rw [← this, ← he.symm_comp_deriv hx]
/-- The derivative of a differentiable local homeomorphism, as a continuous linear equivalence
between the tangent spaces at `x` and `e x`. -/
protected def mfderiv {x : M} (hx : x ∈ e.source) : TangentSpace I x ≃L[𝕜] TangentSpace I' (e x) :=
  { mfderiv I I' e x with
    invFun := mfderiv I' I e.symm (e x)
    continuous_toFun := (mfderiv I I' e x).cont
    continuous_invFun := (mfderiv I' I e.symm (e x)).cont
    left_inv := fun y => by
      have : (ContinuousLinearMap.id _ _ : TangentSpace I x →L[𝕜] TangentSpace I x) y = y := rfl
      conv_rhs => rw [← this, ← he.symm_comp_deriv hx]
    right_inv := fun y => by
      

Proof state:
𝕜 : 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
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'
E'' : Type u_8
inst✝⁷ : NormedAddCommGroup E''
inst✝⁶ : NormedSpace 𝕜 E''
H'' : Type u_9
inst✝⁵ : TopologicalSpace H''
I'' : ModelWithCorners 𝕜 E'' H''
M'' : Type u_10
inst✝⁴ : TopologicalSpace M''
inst✝³ : ChartedSpace H'' M''
e : PartialHomeomorph M M'
he : MDifferentiable I I' e
e' : PartialHomeomorph M' M''
inst✝² : SmoothManifoldWithCorners I M
inst✝¹ : SmoothManifoldWithCorners I' M'
inst✝ : SmoothManifoldWithCorners I'' M''
x : M
hx : x ∈ e.source
src✝ : TangentSpace I x →L[𝕜] TangentSpace I' (↑e x) := mfderiv I I' (↑e) x
y : TangentSpace I' (↑e x)
⊢ AddHom.toFun src✝.toAddHom ((mfderiv I' I (↑(PartialHomeomorph.symm e)) (↑e x)) y) = y

Next tactic:
have :
        (ContinuousLinearMap.id 𝕜 _ : TangentSpace I' (e x) →L[𝕜] TangentSpace I' (e x)) y = y :=
        rfl