-- Mathlib/Geometry/Manifold/MFDeriv/Tangent.lean
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)

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
inst✝ : IsManifold I 1 M
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).target
⊢ { proj := ↑(chartAt H p.proj).symm q.proj, snd := (mfderiv I I (↑(chartAt H p.proj).symm) q.proj) q.snd } =
    ↑(chartAt (ModelProd H E) p).symm ((TotalSpace.toProd H E) q)

Tactic:
rw [MDifferentiableAt.mfderiv (mdifferentiableAt_atlas_symm (chart_mem_atlas _ _) h)]

Result:
𝕜 : 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✝ : IsManifold I 1 M
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).target
⊢ { proj := ↑(chartAt H p.proj).symm q.proj,
      snd :=
        (fderivWithin 𝕜 (writtenInExtChartAt I I q.proj ↑(chartAt H p.proj).symm) (range ↑I)
            (↑(extChartAt I q.proj) q.proj))
          q.snd } =
    ↑(chartAt (ModelProd H E) p).symm ((TotalSpace.toProd H E) q)

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
inst✝ : IsManifold I 1 M
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).target
⊢ tangentMap I I (↑(chartAt H p.proj).symm) q = ↑(chartAt (ModelProd H E) p).symm ((TotalSpace.toProd H E) q)

Tactic:
dsimp only [tangentMap]

Result:
𝕜 : 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✝ : IsManifold I 1 M
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).target
⊢ { proj := ↑(chartAt H p.proj).symm q.proj, snd := (mfderiv I I (↑(chartAt H p.proj).symm) q.proj) q.snd } =
    ↑(chartAt (ModelProd H E) p).symm ((TotalSpace.toProd H E) q)

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
inst✝ : IsManifold I 1 M
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).target
⊢ { proj := ↑(chartAt H p.proj).symm q.proj,
      snd :=
        (fderivWithin 𝕜 ((↑I ∘ ↑(chartAt H (↑(chartAt H p.proj).symm q.proj))) ∘ ↑(chartAt H p.proj).symm ∘ ↑I.symm)
            (range ↑I) (↑I q.proj))
          q.snd } =
    ↑({ baseSet := fun i => (↑i).source, isOpen_baseSet := ⋯, indexAt := achart H, mem_baseSet_at := ⋯,
                  coordChange := fun i j x =>
                    fderivWithin 𝕜 ((↑I ∘ ↑↑j) ∘ ↑(↑i).symm ∘ ↑I.symm) (range ↑I) (↑I (↑↑i x)),
                  coordChange_self := ⋯, continuousOn_coordChange := ⋯,
                  coordChange_comp := ⋯ }.toFiberBundleCore.localTriv
            (achart H p.proj)).symm
      (↑((chartAt H p.proj).prod (PartialHomeomorph.refl E)).symm (q.proj, q.snd))

Tactic:
congr

Result:
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✝ : IsManifold I 1 M
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).target
⊢ q.proj = ↑↑(achart H p.proj) (↑((chartAt H p.proj).prod (PartialHomeomorph.refl E)).symm (q.proj, q.snd)).1

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✝ : IsManifold I 1 M
p : TangentBundle I M
q : TangentBundle I H
h : q.proj ∈ (chartAt H p.proj).target
⊢ q.proj = ↑↑(achart H p.proj) (↑((chartAt H p.proj).prod (PartialHomeomorph.refl E)).symm (q.proj, q.snd)).1

Tactic:
exact ((chartAt H (TotalSpace.proj p)).right_inv h).symm

Result:
no goals