File: Mathlib/Geometry/Manifold/VectorBundle/Tangent.lean

full_name: contDiffOn_fderiv_coord_change
code: /-- Auxiliary lemma for tangent spaces: the derivative of a coordinate change between two charts is
  smooth on its source. -/
theorem contDiffOn_fderiv_coord_change (i j : atlas H M) :
    ContDiffOn 𝕜 ∞ (fderivWithin 𝕜 (j.1.extend I ∘ (i.1.extend I).symm) (range I))
      ((i.1.extend I).symm ≫ j.1.extend I).source 
goal: ContDiffOn 𝕜 ⊤ (fderivWithin 𝕜 (↑((↑j).extend I) ∘ ↑((↑i).extend I).symm) (Set.range ↑I))
  (((↑i).extend I).symm ≫ (↑j).extend I).source

full_name: tangentBundleCore
code: /-- Let `M` be a smooth manifold with corners with model `I` on `(E, H)`.
Then `VectorBundleCore I M` is the vector bundle core for the tangent bundle over `M`.
It is indexed by the atlas of `M`, with fiber `E` and its change of coordinates from the chart `i`
to the chart `j` at point `x : M` is the derivative of the composite
```
  I.symm   i.symm    j     I
E -----> H -----> M --> H --> E
```
within the set `range I ⊆ E` at `I (i x) : E`. -/
@[simps indexAt coordChange]
def tangentBundleCore : VectorBundleCore 𝕜 M E (atlas H M) 
goal: VectorBundleCore 𝕜 M E ↑(atlas H M)

full_name: tangentBundleCore_coordChange
code: /-- Let `M` be a smooth manifold with corners with model `I` on `(E, H)`.
Then `VectorBundleCore I M` is the vector bundle core for the tangent bundle over `M`.
It is indexed by the atlas of `M`, with fiber `E` and its change of coordinates from the chart `i`
to the chart `j` at point `x : M` is the derivative of the composite
```
  I.symm   i.symm    j     I
E -----> H -----> M --> H --> E
```
within the set `range I ⊆ E` at `I (i x) : E`. -/
@[simps indexAt coordChange]
def tangentBundleCore : VectorBundleCore 𝕜 M E (atlas H M) 
goal: (tangentBundleCore I M).coordChange i j x =
  fderivWithin 𝕜 (↑((↑j).extend I) ∘ ↑((↑i).extend I).symm) (Set.range ↑I) (↑((↑i).extend I) x)

full_name: tangentBundleCore_indexAt
code: /-- Let `M` be a smooth manifold with corners with model `I` on `(E, H)`.
Then `VectorBundleCore I M` is the vector bundle core for the tangent bundle over `M`.
It is indexed by the atlas of `M`, with fiber `E` and its change of coordinates from the chart `i`
to the chart `j` at point `x : M` is the derivative of the composite
```
  I.symm   i.symm    j     I
E -----> H -----> M --> H --> E
```
within the set `range I ⊆ E` at `I (i x) : E`. -/
@[simps indexAt coordChange]
def tangentBundleCore : VectorBundleCore 𝕜 M E (atlas H M) 
goal: (tangentBundleCore I M).indexAt x = achart H x

full_name: tangentBundleCore_baseSet
code: @[simp high]
theorem tangentBundleCore_baseSet (i) : (tangentBundleCore I M).baseSet i = i.1.source 
goal: (tangentBundleCore I M).baseSet i = (↑i).source

full_name: tangentBundleCore_coordChange_achart
code: theorem tangentBundleCore_coordChange_achart (x x' z : M) :
    (tangentBundleCore I M).coordChange (achart H x) (achart H x') z =
      fderivWithin 𝕜 (extChartAt I x' ∘ (extChartAt I x).symm) (range I) (extChartAt I x z) 
goal: (tangentBundleCore I M).coordChange (achart H x) (achart H x') z =
  fderivWithin 𝕜 (↑(extChartAt I x') ∘ ↑(extChartAt I x).symm) (Set.range ↑I) (↑(extChartAt I x) z)

full_name: tangentCoordChange
code: /-- In a manifold `M`, given two preferred charts indexed by `x y : M`, `tangentCoordChange I x y`
is the family of derivatives of the corresponding change-of-coordinates map. It takes junk values
outside the intersection of the sources of the two charts.

Note that this definition takes advantage of the fact that `tangentBundleCore` has the same base
sets as the preferred charts of the base manifold. -/
abbrev tangentCoordChange (x y : M) : M → E →L[𝕜] E 
goal: M → E →L[𝕜] E

full_name: tangentCoordChange_def
code: lemma tangentCoordChange_def {x y z : M} : tangentCoordChange I x y z =
    fderivWithin 𝕜 (extChartAt I y ∘ (extChartAt I x).symm) (range I) (extChartAt I x z) 
goal: tangentCoordChange I x y z =
  fderivWithin 𝕜 (↑(extChartAt I y) ∘ ↑(extChartAt I x).symm) (Set.range ↑I) (↑(extChartAt I x) z)

full_name: tangentCoordChange_self
code: lemma tangentCoordChange_self {x z : M} {v : E} (h : z ∈ (extChartAt I x).source) :
    tangentCoordChange I x x z v = v 
goal: (tangentCoordChange I x x z) v = v

full_name: tangentCoordChange_comp
code: lemma tangentCoordChange_comp {w x y z : M} {v : E}
    (h : z ∈ (extChartAt I w).source ∩ (extChartAt I x).source ∩ (extChartAt I y).source) :
    tangentCoordChange I x y z (tangentCoordChange I w x z v) = tangentCoordChange I w y z v 
goal: (tangentCoordChange I x y z) ((tangentCoordChange I w x z) v) = (tangentCoordChange I w y z) v

full_name: hasFDerivWithinAt_tangentCoordChange
code: lemma hasFDerivWithinAt_tangentCoordChange {x y z : M}
    (h : z ∈ (extChartAt I x).source ∩ (extChartAt I y).source) :
    HasFDerivWithinAt ((extChartAt I y) ∘ (extChartAt I x).symm) (tangentCoordChange I x y z)
      (range I) (extChartAt I x z) 
goal: HasFDerivWithinAt (↑(extChartAt I y) ∘ ↑(extChartAt I x).symm) (tangentCoordChange I x y z) (Set.range ↑I)
  (↑(extChartAt I x) z)

full_name: continuousOn_tangentCoordChange
code: lemma continuousOn_tangentCoordChange (x y : M) : ContinuousOn (tangentCoordChange I x y)
    ((extChartAt I x).source ∩ (extChartAt I y).source) 
goal: ContinuousOn (tangentCoordChange I x y) ((extChartAt I x).source ∩ (extChartAt I y).source)

full_name: TangentSpace
code: /-- The tangent space at a point of the manifold `M`. It is just `E`. We could use instead
`(tangentBundleCore I M).to_topological_vector_bundle_core.fiber x`, but we use `E` to help the
kernel.
-/
@[nolint unusedArguments]
def TangentSpace {𝕜} [NontriviallyNormedField 𝕜] {E} [NormedAddCommGroup E] [NormedSpace 𝕜 E]
    {H} [TopologicalSpace H] (I : ModelWithCorners 𝕜 E H) {M} [TopologicalSpace M]
    [ChartedSpace H M] [SmoothManifoldWithCorners I M] (_x : M) : Type* 
goal: Type u_9

full_name: instTopologicalSpaceTangentSpace
code: instance {x : M} : TopologicalSpace (TangentSpace I x) 
goal: TopologicalSpace (TangentSpace I x)

full_name: instAddCommGroupTangentSpace
code: instance {x : M} : AddCommGroup (TangentSpace I x) 
goal: AddCommGroup (TangentSpace I x)

full_name: instTopologicalAddGroupTangentSpace
code: instance {x : M} : TopologicalAddGroup (TangentSpace I x) 
goal: TopologicalAddGroup (TangentSpace I x)

full_name: TangentBundle
code: /-- The tangent bundle to a smooth manifold, as a Sigma type. Defined in terms of
`Bundle.TotalSpace` to be able to put a suitable topology on it. -/
-- Porting note(#5171): was nolint has_nonempty_instance
abbrev TangentBundle 
goal: Type (max u_6 u_2)

full_name: _aux_Mathlib_Geometry_Manifold_VectorBundle_Tangent___unexpand_TangentBundle_1
code: local notation "TM" => TangentBundle I M
goal: Lean.PrettyPrinter.Unexpander

full_name: _aux_Mathlib_Geometry_Manifold_VectorBundle_Tangent___macroRules_termTM_1
code: local notation "TM" => TangentBundle I M
goal: Lean.Macro

full_name: instModuleTangentSpace
code: instance : Module 𝕜 (TangentSpace I x) 
goal: Module 𝕜 (TangentSpace I x)

full_name: instInhabitedTangentSpace
code: instance : Inhabited (TangentSpace I x) 
goal: Inhabited (TangentSpace I x)

full_name: instTopologicalSpaceTangentBundle
code: instance : TopologicalSpace TM 
goal: TopologicalSpace (TangentBundle I M)

full_name: TangentSpace.fiberBundle
code: instance TangentSpace.fiberBundle : FiberBundle E (TangentSpace I : M → Type _) 
goal: FiberBundle E (TangentSpace I)

full_name: TangentSpace.vectorBundle
code: instance TangentSpace.vectorBundle : VectorBundle 𝕜 E (TangentSpace I : M → Type _) 
goal: VectorBundle 𝕜 E (TangentSpace I)

full_name: TangentBundle.chartAt
code: protected theorem chartAt (p : TM) :
    chartAt (ModelProd H E) p =
      ((tangentBundleCore I M).toFiberBundleCore.localTriv (achart H p.1)).toPartialHomeomorph ≫ₕ
        (chartAt H p.1).prod (PartialHomeomorph.refl E) 
goal: chartAt (ModelProd H E) p =
  ((tangentBundleCore I M).toFiberBundleCore.localTriv (achart H p.proj)).toPartialHomeomorph ≫ₕ
    (chartAt H p.proj).prod (PartialHomeomorph.refl E)

full_name: TangentBundle.chartAt_toPartialEquiv
code: theorem chartAt_toPartialEquiv (p : TM) :
    (chartAt (ModelProd H E) p).toPartialEquiv =
      (tangentBundleCore I M).toFiberBundleCore.localTrivAsPartialEquiv (achart H p.1) ≫
        (chartAt H p.1).toPartialEquiv.prod (PartialEquiv.refl E) 
goal: (chartAt (ModelProd H E) p).toPartialEquiv =
  (tangentBundleCore I M).toFiberBundleCore.localTrivAsPartialEquiv (achart H p.proj) ≫
    (chartAt H p.proj).prod (PartialEquiv.refl E)

full_name: TangentBundle.trivializationAt_eq_localTriv
code: theorem trivializationAt_eq_localTriv (x : M) :
    trivializationAt E (TangentSpace I) x =
      (tangentBundleCore I M).toFiberBundleCore.localTriv (achart H x) 
goal: trivializationAt E (TangentSpace I) x = (tangentBundleCore I M).toFiberBundleCore.localTriv (achart H x)

full_name: TangentBundle.trivializationAt_source
code: @[simp, mfld_simps]
theorem trivializationAt_source (x : M) :
    (trivializationAt E (TangentSpace I) x).source =
      π E (TangentSpace I) ⁻¹' (chartAt H x).source 
goal: (trivializationAt E (TangentSpace I) x).source = Bundle.TotalSpace.proj ⁻¹' (chartAt H x).source

full_name: TangentBundle.trivializationAt_target
code: @[simp, mfld_simps]
theorem trivializationAt_target (x : M) :
    (trivializationAt E (TangentSpace I) x).target = (chartAt H x).source ×ˢ univ 
goal: (trivializationAt E (TangentSpace I) x).target = (chartAt H x).source ×ˢ Set.univ

full_name: TangentBundle.trivializationAt_baseSet
code: @[simp, mfld_simps]
theorem trivializationAt_baseSet (x : M) :
    (trivializationAt E (TangentSpace I) x).baseSet = (chartAt H x).source 
goal: (trivializationAt E (TangentSpace I) x).baseSet = (chartAt H x).source

full_name: TangentBundle.trivializationAt_apply
code: theorem trivializationAt_apply (x : M) (z : TM) :
    trivializationAt E (TangentSpace I) x z =
      (z.1, fderivWithin 𝕜 ((chartAt H x).extend I ∘ ((chartAt H z.1).extend I).symm) (range I)
        ((chartAt H z.1).extend I z.1) z.2) 
goal: ↑(trivializationAt E (TangentSpace I) x) z =
  (z.proj,
    (fderivWithin 𝕜 (↑((chartAt H x).extend I) ∘ ↑((chartAt H z.proj).extend I).symm) (Set.range ↑I)
        (↑((chartAt H z.proj).extend I) z.proj))
      z.snd)

full_name: TangentBundle.trivializationAt_fst
code: @[simp, mfld_simps]
theorem trivializationAt_fst (x : M) (z : TM) : (trivializationAt E (TangentSpace I) x z).1 = z.1 
goal: (↑(trivializationAt E (TangentSpace I) x) z).1 = z.proj

full_name: TangentBundle.mem_chart_source_iff
code: @[simp, mfld_simps]
theorem mem_chart_source_iff (p q : TM) :
    p ∈ (chartAt (ModelProd H E) q).source ↔ p.1 ∈ (chartAt H q.1).source 
goal: p ∈ (chartAt (ModelProd H E) q).source ↔ p.proj ∈ (chartAt H q.proj).source

full_name: TangentBundle.mem_chart_target_iff
code: @[simp, mfld_simps]
theorem mem_chart_target_iff (p : H × E) (q : TM) :
    p ∈ (chartAt (ModelProd H E) q).target ↔ p.1 ∈ (chartAt H q.1).target 
goal: p ∈ (chartAt (ModelProd H E) q).target ↔ p.1 ∈ (chartAt H q.proj).target

full_name: TangentBundle.coe_chartAt_fst
code: @[simp, mfld_simps]
theorem coe_chartAt_fst (p q : TM) : ((chartAt (ModelProd H E) q) p).1 = chartAt H q.1 p.1 
goal: (↑(chartAt (ModelProd H E) q) p).1 = ↑(chartAt H q.proj) p.proj

full_name: TangentBundle.coe_chartAt_symm_fst
code: @[simp, mfld_simps]
theorem coe_chartAt_symm_fst (p : H × E) (q : TM) :
    ((chartAt (ModelProd H E) q).symm p).1 = ((chartAt H q.1).symm : H → M) p.1 
goal: (↑(chartAt (ModelProd H E) q).symm p).proj = ↑(chartAt H q.proj).symm p.1

full_name: TangentBundle.trivializationAt_continuousLinearMapAt
code: @[simp, mfld_simps]
theorem trivializationAt_continuousLinearMapAt {b₀ b : M}
    (hb : b ∈ (trivializationAt E (TangentSpace I) b₀).baseSet) :
    (trivializationAt E (TangentSpace I) b₀).continuousLinearMapAt 𝕜 b =
      (tangentBundleCore I M).coordChange (achart H b) (achart H b₀) b 
goal: Trivialization.continuousLinearMapAt 𝕜 (trivializationAt E (TangentSpace I) b₀) b =
  (tangentBundleCore I M).coordChange (achart H b) (achart H b₀) b

full_name: TangentBundle.trivializationAt_symmL
code: @[simp, mfld_simps]
theorem trivializationAt_symmL {b₀ b : M}
    (hb : b ∈ (trivializationAt E (TangentSpace I) b₀).baseSet) :
    (trivializationAt E (TangentSpace I) b₀).symmL 𝕜 b =
      (tangentBundleCore I M).coordChange (achart H b₀) (achart H b) b 
goal: Trivialization.symmL 𝕜 (trivializationAt E (TangentSpace I) b₀) b =
  (tangentBundleCore I M).coordChange (achart H b₀) (achart H b) b

full_name: TangentBundle.coordChange_model_space
code: @[simp high, mfld_simps]
theorem coordChange_model_space (b b' x : F) :
    (tangentBundleCore 𝓘(𝕜, F) F).coordChange (achart F b) (achart F b') x = 1 
goal: (tangentBundleCore 𝓘(𝕜, F) F).coordChange (achart F b) (achart F b') x = 1

full_name: TangentBundle.symmL_model_space
code: @[simp high, mfld_simps]
theorem symmL_model_space (b b' : F) :
    (trivializationAt F (TangentSpace 𝓘(𝕜, F)) b).symmL 𝕜 b' = (1 : F →L[𝕜] F) 
goal: Trivialization.symmL 𝕜 (trivializationAt F (TangentSpace 𝓘(𝕜, F)) b) b' = 1

full_name: TangentBundle.continuousLinearMapAt_model_space
code: @[simp high, mfld_simps]
theorem continuousLinearMapAt_model_space (b b' : F) :
    (trivializationAt F (TangentSpace 𝓘(𝕜, F)) b).continuousLinearMapAt 𝕜 b' = (1 : F →L[𝕜] F) 
goal: Trivialization.continuousLinearMapAt 𝕜 (trivializationAt F (TangentSpace 𝓘(𝕜, F)) b) b' = 1

full_name: tangentBundleCore.isSmooth
code: instance tangentBundleCore.isSmooth : (tangentBundleCore I M).IsSmooth I 
goal: (tangentBundleCore I M).IsSmooth I

full_name: TangentBundle.smoothVectorBundle
code: instance TangentBundle.smoothVectorBundle : SmoothVectorBundle E (TangentSpace I : M → Type _) I 
goal: SmoothVectorBundle E (TangentSpace I) I

full_name: tangentBundle_model_space_chartAt
code: /-- In the tangent bundle to the model space, the charts are just the canonical identification
between a product type and a sigma type, a.k.a. `TotalSpace.toProd`. -/
@[simp, mfld_simps]
theorem tangentBundle_model_space_chartAt (p : TangentBundle I H) :
    (chartAt (ModelProd H E) p).toPartialEquiv = (TotalSpace.toProd H E).toPartialEquiv 
goal: (chartAt (ModelProd H E) p).toPartialEquiv = (Bundle.TotalSpace.toProd H E).toPartialEquiv

full_name: tangentBundle_model_space_coe_chartAt
code: @[simp, mfld_simps]
theorem tangentBundle_model_space_coe_chartAt (p : TangentBundle I H) :
    ⇑(chartAt (ModelProd H E) p) = TotalSpace.toProd H E 
goal: ↑(chartAt (ModelProd H E) p) = ⇑(Bundle.TotalSpace.toProd H E)

full_name: tangentBundle_model_space_coe_chartAt_symm
code: @[simp, mfld_simps]
theorem tangentBundle_model_space_coe_chartAt_symm (p : TangentBundle I H) :
    ((chartAt (ModelProd H E) p).symm : ModelProd H E → TangentBundle I H) =
      (TotalSpace.toProd H E).symm 
goal: ↑(chartAt (ModelProd H E) p).symm = ⇑(Bundle.TotalSpace.toProd H E).symm

full_name: tangentBundleCore_coordChange_model_space
code: theorem tangentBundleCore_coordChange_model_space (x x' z : H) :
    (tangentBundleCore I H).coordChange (achart H x) (achart H x') z =
    ContinuousLinearMap.id 𝕜 E 
goal: (tangentBundleCore I H).coordChange (achart H x) (achart H x') z = ContinuousLinearMap.id 𝕜 E

full_name: tangentBundleModelSpaceHomeomorph
code: /-- The canonical identification between the tangent bundle to the model space and the product,
as a homeomorphism -/
def tangentBundleModelSpaceHomeomorph : TangentBundle I H ≃ₜ ModelProd H E 
goal: TangentBundle I H ≃ₜ ModelProd H E

full_name: tangentBundleModelSpaceHomeomorph_coe
code: @[simp, mfld_simps]
theorem tangentBundleModelSpaceHomeomorph_coe :
    (tangentBundleModelSpaceHomeomorph H I : TangentBundle I H → ModelProd H E) =
      TotalSpace.toProd H E 
goal: ⇑(tangentBundleModelSpaceHomeomorph H I) = ⇑(Bundle.TotalSpace.toProd H E)

full_name: tangentBundleModelSpaceHomeomorph_coe_symm
code: @[simp, mfld_simps]
theorem tangentBundleModelSpaceHomeomorph_coe_symm :
    ((tangentBundleModelSpaceHomeomorph H I).symm : ModelProd H E → TangentBundle I H) =
      (TotalSpace.toProd H E).symm 
goal: ⇑(tangentBundleModelSpaceHomeomorph H I).symm = ⇑(Bundle.TotalSpace.toProd H E).symm

full_name: inCoordinates_tangent_bundle_core_model_space
code: /-- The map `in_coordinates` for the tangent bundle is trivial on the model spaces -/
theorem inCoordinates_tangent_bundle_core_model_space (x₀ x : H) (y₀ y : H') (ϕ : E →L[𝕜] E') :
    inCoordinates E (TangentSpace I) E' (TangentSpace I') x₀ x y₀ y ϕ = ϕ 
goal: ContinuousLinearMap.inCoordinates E (TangentSpace I) E' (TangentSpace I') x₀ x y₀ y ϕ = ϕ

full_name: inTangentCoordinates
code: /-- When `ϕ x` is a continuous linear map that changes vectors in charts around `f x` to vectors
in charts around `g x`, `inTangentCoordinates I I' f g ϕ x₀ x` is a coordinate change of
this continuous linear map that makes sense from charts around `f x₀` to charts around `g x₀`
by composing it with appropriate coordinate changes.
Note that the type of `ϕ` is more accurately
`Π x : N, TangentSpace I (f x) →L[𝕜] TangentSpace I' (g x)`.
We are unfolding `TangentSpace` in this type so that Lean recognizes that the type of `ϕ` doesn't
actually depend on `f` or `g`.

This is the underlying function of the trivializations of the hom of (pullbacks of) tangent spaces.
-/
def inTangentCoordinates (f : N → M) (g : N → M') (ϕ : N → E →L[𝕜] E') : N → N → E →L[𝕜] E' 
goal: N → N → E →L[𝕜] E'

full_name: inTangentCoordinates_model_space
code: theorem inTangentCoordinates_model_space (f : N → H) (g : N → H') (ϕ : N → E →L[𝕜] E') (x₀ : N) :
    inTangentCoordinates I I' f g ϕ x₀ = ϕ 
goal: inTangentCoordinates I I' f g ϕ x₀ = ϕ

full_name: inTangentCoordinates_eq
code: theorem inTangentCoordinates_eq (f : N → M) (g : N → M') (ϕ : N → E →L[𝕜] E') {x₀ x : N}
    (hx : f x ∈ (chartAt H (f x₀)).source) (hy : g x ∈ (chartAt H' (g x₀)).source) :
    inTangentCoordinates I I' f g ϕ x₀ x =
      (tangentBundleCore I' M').coordChange (achart H' (g x)) (achart H' (g x₀)) (g x) ∘L
        ϕ x ∘L (tangentBundleCore I M).coordChange (achart H (f x₀)) (achart H (f x)) (f x) 
goal: inTangentCoordinates I I' f g ϕ x₀ x =
  ((tangentBundleCore I' M').coordChange (achart H' (g x)) (achart H' (g x₀)) (g x)).comp
    ((ϕ x).comp ((tangentBundleCore I M).coordChange (achart H (f x₀)) (achart H (f x)) (f x)))

full_name: instPathConnectedSpaceTangentSpaceReal
code: instance {x : M} : PathConnectedSpace (TangentSpace I x) 
goal: PathConnectedSpace (TangentSpace I x)