Skip to content

Commit c13710c

Browse files
committed
chore(Topology/FiberBundle/Trivialisation): more simp lemmas (#35978)
Inspired by #26221 (defining covariant derivatives, and the path towards geodesics).
1 parent 038d0e4 commit c13710c

5 files changed

Lines changed: 23 additions & 18 deletions

File tree

Mathlib/Geometry/Manifold/VectorBundle/Hom.lean

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,7 @@ lemma ContMDiffWithinAt.clm_apply_of_inCoordinates
197197
exact FiberBundle.mem_baseSet_trivializationAt' (b₂ m₀)
198198
filter_upwards [A, A'] with m hm h'm
199199
rw [inCoordinates_eq hm h'm]
200-
simp only [coe_comp', ContinuousLinearEquiv.coe_coe, Trivialization.continuousLinearEquivAt_apply,
201-
Trivialization.continuousLinearEquivAt_symm_apply, Function.comp_apply]
202-
congr
203-
rw [Trivialization.symm_apply_apply_mk (trivializationAt F₁ E₁ (b₁ m₀)) hm (v m)]
200+
simp [*]
204201

205202
/-- Consider a `C^n` map `v : M → E₁` to a vector bundle, over a base map `b₁ : M → B₁`, and
206203
another base map `b₂ : M → B₂`. Given linear maps `ϕ m : E₁ (b₁ m) → E₂ (b₂ m)` depending smoothly

Mathlib/Geometry/Manifold/VectorBundle/MDifferentiable.lean

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -696,10 +696,7 @@ lemma MDifferentiableWithinAt.clm_apply_of_inCoordinates
696696
exact FiberBundle.mem_baseSet_trivializationAt' (b₂ m₀)
697697
filter_upwards [A, A'] with m hm h'm
698698
rw [inCoordinates_eq hm h'm]
699-
simp only [coe_comp', ContinuousLinearEquiv.coe_coe, Trivialization.continuousLinearEquivAt_apply,
700-
Trivialization.continuousLinearEquivAt_symm_apply, Function.comp_apply]
701-
congr
702-
rw [Trivialization.symm_apply_apply_mk (trivializationAt F₁ E₁ (b₁ m₀)) hm (v m)]
699+
simp [hm]
703700

704701
/-- Consider a differentiable map `v : M → E₁` to a vector bundle, over a basemap `b₁ : M → B₁`, and
705702
another basemap `b₂ : M → B₂`. Given linear maps `ϕ m : E₁ (b₁ m) → E₂ (b₂ m)` depending

Mathlib/Topology/FiberBundle/Constructions.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,14 @@ theorem Prod.left_inv {x : TotalSpace (F₁ × F₂) (E₁ ×ᵇ E₂)}
169169
Prod.invFun' e₁ e₂ (Prod.toFun' e₁ e₂ x) = x := by
170170
obtain ⟨x, v₁, v₂⟩ := x
171171
obtain ⟨h₁ : x ∈ e₁.baseSet, h₂ : x ∈ e₂.baseSet⟩ := h
172-
simp only [Prod.toFun', Prod.invFun', symm_apply_apply_mk, h₁, h₂]
172+
simp [Prod.toFun', Prod.invFun', h₁, h₂]
173173

174174
theorem Prod.right_inv {x : B × F₁ × F₂}
175175
(h : x ∈ (e₁.baseSet ∩ e₂.baseSet) ×ˢ (univ : Set (F₁ × F₂))) :
176176
Prod.toFun' e₁ e₂ (Prod.invFun' e₁ e₂ x) = x := by
177177
obtain ⟨x, w₁, w₂⟩ := x
178178
obtain ⟨⟨h₁ : x ∈ e₁.baseSet, h₂ : x ∈ e₂.baseSet⟩, -⟩ := h
179-
simp only [Prod.toFun', Prod.invFun', apply_mk_symm, h₁, h₂]
179+
simp [Prod.toFun', Prod.invFun', h₁, h₂]
180180

181181
theorem Prod.continuous_inv_fun :
182182
ContinuousOn (Prod.invFun' e₁ e₂) ((e₁.baseSet ∩ e₂.baseSet) ×ˢ univ) := by

Mathlib/Topology/FiberBundle/Trivialization.lean

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ lemma ext' (e e' : Pretrivialization F proj) (h₁ : e.toPartialEquiv = e'.toPar
9191
(h₂ : e.baseSet = e'.baseSet) : e = e' := by
9292
cases e; cases e'; congr
9393

94-
-- TODO: move `ext` here?
94+
-- TODO: tag this lemma with the `ext` attribute instead?
9595
lemma ext {e e' : Pretrivialization F proj} (h₁ : ∀ x, e x = e' x)
9696
(h₂ : ∀ x, e.toPartialEquiv.symm x = e'.toPartialEquiv.symm x) (h₃ : e.baseSet = e'.baseSet) :
9797
e = e' := by
@@ -122,9 +122,11 @@ theorem coe_fst' (ex : proj x ∈ e.baseSet) : (e x).1 = proj x :=
122122

123123
protected theorem eqOn : EqOn (Prod.fst ∘ e) proj e.source := fun _ hx => e.coe_fst hx
124124

125+
@[simp]
125126
theorem mk_proj_snd (ex : x ∈ e.source) : (proj x, (e x).2) = e x :=
126127
Prod.ext (e.coe_fst ex).symm rfl
127128

129+
@[simp]
128130
theorem mk_proj_snd' (ex : proj x ∈ e.baseSet) : (proj x, (e x).2) = e x :=
129131
Prod.ext (e.coe_fst' ex).symm rfl
130132

@@ -148,17 +150,19 @@ theorem proj_surjOn_baseSet [Nonempty F] : Set.SurjOn proj e.source e.baseSet :=
148150
⟨e.toPartialEquiv.symm (b, y), e.toPartialEquiv.map_target <| e.mem_target.2 hb,
149151
e.proj_symm_apply' hb⟩
150152

153+
@[simp, mfld_simps]
151154
theorem apply_symm_apply {x : B × F} (hx : x ∈ e.target) : e (e.toPartialEquiv.symm x) = x :=
152155
e.toPartialEquiv.right_inv hx
153156

157+
@[simp, mfld_simps]
154158
theorem apply_symm_apply' {b : B} {x : F} (hx : b ∈ e.baseSet) :
155159
e (e.toPartialEquiv.symm (b, x)) = (b, x) :=
156160
e.apply_symm_apply (e.mem_target.2 hx)
157161

162+
@[simp, mfld_simps]
158163
theorem symm_apply_apply {x : Z} (hx : x ∈ e.source) : e.toPartialEquiv.symm (e x) = x :=
159164
e.toPartialEquiv.left_inv hx
160165

161-
@[simp, mfld_simps]
162166
theorem symm_apply_mk_proj {x : Z} (ex : x ∈ e.source) :
163167
e.toPartialEquiv.symm (proj x, (e x).2) = x := by
164168
rw [← e.coe_fst ex, ← e.coe_coe, e.left_inv ex]
@@ -214,6 +218,7 @@ theorem coe_coe_fst (hb : b ∈ e'.baseSet) : (e' y).1 = b := by
214218
theorem mk_mem_target {x : B} {y : F} : (x, y) ∈ e'.target ↔ x ∈ e'.baseSet :=
215219
e'.mem_target
216220

221+
@[simp, mfld_simps]
217222
theorem symm_coe_proj {x : B} {y : F} (e' : Pretrivialization F (π F E)) (h : x ∈ e'.baseSet) :
218223
(e'.toPartialEquiv.symm (x, y)).1 = x :=
219224
e'.proj_symm_apply' h
@@ -246,15 +251,17 @@ theorem mk_symm (e : Pretrivialization F (π F E)) {b : B} (hb : b ∈ e.baseSet
246251
TotalSpace.mk b (e.symm b y) = e.toPartialEquiv.symm (b, y) := by
247252
simp only [e.symm_apply hb, TotalSpace.mk_cast (e.proj_symm_apply' hb), TotalSpace.eta]
248253

254+
@[simp, mfld_simps]
249255
theorem symm_proj_apply (e : Pretrivialization F (π F E)) (z : TotalSpace F E)
250256
(hz : z.proj ∈ e.baseSet) : e.symm z.proj (e z).2 = z.2 := by
251257
rw [e.symm_apply hz, cast_eq_iff_heq, e.mk_proj_snd' hz, e.symm_apply_apply (e.mem_source.mpr hz)]
252258

259+
@[simp, mfld_simps]
253260
theorem symm_apply_apply_mk (e : Pretrivialization F (π F E)) {b : B} (hb : b ∈ e.baseSet)
254261
(y : E b) : e.symm b (e ⟨b, y⟩).2 = y :=
255262
e.symm_proj_apply ⟨b, y⟩ hb
256263

257-
@[simp]
264+
@[simp, mfld_simps]
258265
theorem apply_mk_symm (e : Pretrivialization F (π F E)) {b : B} (hb : b ∈ e.baseSet) (y : F) :
259266
e ⟨b, e.symm b y⟩ = (b, y) := by
260267
rw [e.mk_symm hb, e.apply_symm_apply (e.mk_mem_target.mpr hb)]
@@ -420,6 +427,7 @@ protected theorem eqOn : EqOn (Prod.fst ∘ e) proj e.source := fun _x hx => e.c
420427

421428
theorem mem_source : x ∈ e.source ↔ proj x ∈ e.baseSet := by rw [e.source_eq, mem_preimage]
422429

430+
@[simp, mfld_simps]
423431
theorem coe_fst' (ex : proj x ∈ e.baseSet) : (e x).1 = proj x :=
424432
e.coe_fst (e.mem_source.2 ex)
425433

@@ -455,10 +463,12 @@ theorem proj_symm_apply' {b : B} {x : F} (hx : b ∈ e.baseSet) :
455463
theorem proj_surjOn_baseSet [Nonempty F] : Set.SurjOn proj e.source e.baseSet :=
456464
e.toPretrivialization.proj_surjOn_baseSet
457465

466+
@[simp, mfld_simps]
458467
theorem apply_symm_apply {x : B × F} (hx : x ∈ e.target) :
459468
e (e.toOpenPartialHomeomorph.symm x) = x :=
460469
e.toOpenPartialHomeomorph.right_inv hx
461470

471+
@[simp, mfld_simps]
462472
theorem apply_symm_apply' {b : B} {x : F} (hx : b ∈ e.baseSet) :
463473
e (e.toOpenPartialHomeomorph.symm (b, x)) = (b, x) :=
464474
e.toPretrivialization.apply_symm_apply' hx
@@ -633,13 +643,13 @@ protected theorem continuousOn : ContinuousOn e' e'.source :=
633643
theorem coe_mem_source : ↑y ∈ e'.source ↔ b ∈ e'.baseSet :=
634644
e'.mem_source
635645

636-
@[simp, mfld_simps]
637646
theorem coe_coe_fst (hb : b ∈ e'.baseSet) : (e' y).1 = b :=
638647
e'.coe_fst (e'.mem_source.2 hb)
639648

640649
theorem mk_mem_target {y : F} : (b, y) ∈ e'.target ↔ b ∈ e'.baseSet :=
641650
e'.toPretrivialization.mem_target
642651

652+
@[simp, mfld_simps]
643653
theorem symm_apply_apply {x : TotalSpace F E} (hx : x ∈ e'.source) :
644654
e'.toOpenPartialHomeomorph.symm (e' x) = x :=
645655
e'.toPartialEquiv.left_inv hx
@@ -671,10 +681,12 @@ theorem mk_symm (e : Trivialization F (π F E)) {b : B} (hb : b ∈ e.baseSet) (
671681
TotalSpace.mk b (e.symm b y) = e.toOpenPartialHomeomorph.symm (b, y) :=
672682
e.toPretrivialization.mk_symm hb y
673683

684+
@[simp, mfld_simps]
674685
theorem symm_proj_apply (e : Trivialization F (π F E)) (z : TotalSpace F E)
675686
(hz : z.proj ∈ e.baseSet) : e.symm z.proj (e z).2 = z.2 :=
676687
e.toPretrivialization.symm_proj_apply z hz
677688

689+
@[simp, mfld_simps]
678690
theorem symm_apply_apply_mk (e : Trivialization F (π F E)) {b : B} (hb : b ∈ e.baseSet) (y : E b) :
679691
e.symm b (e ⟨b, y⟩).2 = y :=
680692
e.symm_proj_apply ⟨b, y⟩ hb
@@ -731,6 +743,7 @@ theorem coordChange_apply_snd (e₁ e₂ : Trivialization F proj) {p : Z} (h : p
731743
e₁.coordChange e₂ (proj p) (e₁ p).snd = (e₂ p).snd := by
732744
rw [coordChange, e₁.symm_apply_mk_proj (e₁.mem_source.2 h)]
733745

746+
@[simp, mfld_simps]
734747
theorem coordChange_same_apply (e : Trivialization F proj) {b : B} (h : b ∈ e.baseSet) (x : F) :
735748
e.coordChange e b x = x := by rw [coordChange, e.apply_symm_apply' h]
736749

@@ -888,7 +901,7 @@ noncomputable def piecewiseLe [LinearOrder B] [OrderTopology B] (e e' : Triviali
888901
e.piecewiseLeOfEq (e'.transFiberHomeomorph (e'.coordChangeHomeomorph e He' He)) a He He' <| by
889902
rintro p rfl
890903
ext1
891-
· simp [e.coe_fst', e'.coe_fst', *]
904+
· simp [*]
892905
· simp [coordChange_apply_snd, *]
893906

894907
open Classical in

Mathlib/Topology/VectorBundle/Hom.lean

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,9 +357,7 @@ lemma ContinuousWithinAt.clm_apply_of_inCoordinates
357357
apply hb₂
358358
apply (trivializationAt F₂ E₂ (b₂ m₀)).open_baseSet.mem_nhds
359359
exact FiberBundle.mem_baseSet_trivializationAt' (b₂ m₀)
360-
filter_upwards [A, A'] with m hm h'm
361-
simp [inCoordinates_eq hm h'm,
362-
Trivialization.symm_apply_apply_mk (trivializationAt F₁ E₁ (b₁ m₀)) hm (v m)]
360+
filter_upwards [A, A'] with m hm h'm using by simp [inCoordinates_eq hm h'm, hm]
363361

364362

365363
/-- Consider a continuous map `v : M → E₁` to a vector bundle, over a base map `b₁ : M → B₁`, and

0 commit comments

Comments
 (0)