Skip to content

Commit 4616876

Browse files
committed
feat: more uses of simps in fiber bundles and vector bundles (leanprover-community#26121)
1 parent 2239a8d commit 4616876

6 files changed

Lines changed: 36 additions & 13 deletions

File tree

Mathlib/Geometry/Manifold/VectorBundle/Basic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -614,10 +614,10 @@ instance Bundle.Prod.contMDiffVectorBundle : ContMDiffVectorBundle n (F₁ × F
614614
refine ContMDiffOn.congr ?_ (e₁.coordChangeL_prod 𝕜 e₁' e₂ e₂')
615615
refine ContMDiffOn.clm_prodMap ?_ ?_
616616
· refine (contMDiffOn_coordChangeL e₁ e₁').mono ?_
617-
simp only [Trivialization.baseSet_prod, mfld_simps]
617+
simp only [Trivialization.prod_baseSet, mfld_simps]
618618
mfld_set_tac
619619
· refine (contMDiffOn_coordChangeL e₂ e₂').mono ?_
620-
simp only [Trivialization.baseSet_prod, mfld_simps]
620+
simp only [Trivialization.prod_baseSet, mfld_simps]
621621
mfld_set_tac
622622

623623
end Prod

Mathlib/Topology/FiberBundle/Constructions.lean

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,12 @@ theorem isInducing_toProd : IsInducing (TotalSpace.toProd B F) :=
4848
@[deprecated (since := "2024-10-28")] alias inducing_toProd := isInducing_toProd
4949

5050
/-- Homeomorphism between the total space of the trivial bundle and the Cartesian product. -/
51+
@[simps!]
5152
def homeomorphProd : TotalSpace F (Trivial B F) ≃ₜ B × F :=
5253
(TotalSpace.toProd _ _).toHomeomorphOfIsInducing (isInducing_toProd B F)
5354

5455
/-- Local trivialization for trivial bundle. -/
56+
@[simps!]
5557
def trivialization : Trivialization F (π F (Bundle.Trivial B F)) where
5658
toPartialHomeomorph := (homeomorphProd B F).toPartialHomeomorph
5759
baseSet := univ
@@ -60,14 +62,16 @@ def trivialization : Trivialization F (π F (Bundle.Trivial B F)) where
6062
target_eq := univ_prod_univ.symm
6163
proj_toFun _ _ := rfl
6264

63-
@[simp]
64-
theorem trivialization_source : (trivialization B F).source = univ := rfl
65+
@[simp] lemma trivialization_symm_apply [Zero F] (b : B) (f : F) :
66+
(trivialization B F).symm b f = f := by
67+
simp [trivialization, homeomorphProd, TotalSpace.toProd, Trivialization.symm,
68+
Pretrivialization.symm, Trivialization.toPretrivialization]
6569

66-
@[simp]
67-
theorem trivialization_target : (trivialization B F).target = univ := rfl
70+
@[simp] lemma toPartialHomeomorph_trivialization_symm_apply (v : B × F) :
71+
(trivialization B F).toPartialHomeomorph.symm v = ⟨v.1, v.2 := rfl
6872

6973
/-- Fiber bundle instance on the trivial bundle. -/
70-
instance fiberBundle : FiberBundle F (Bundle.Trivial B F) where
74+
@[simps] instance fiberBundle : FiberBundle F (Bundle.Trivial B F) where
7175
trivializationAtlas' := {trivialization B F}
7276
trivializationAt' _ := trivialization B F
7377
mem_baseSet_trivializationAt' := mem_univ
@@ -187,6 +191,7 @@ variable (e₁ e₂)
187191
/-- Given trivializations `e₁`, `e₂` for bundle types `E₁`, `E₂` over a base `B`, the induced
188192
trivialization for the fiberwise product of `E₁` and `E₂`, whose base set is
189193
`e₁.baseSet ∩ e₂.baseSet`. -/
194+
@[simps!]
190195
noncomputable def prod : Trivialization (F₁ × F₂) (π (F₁ × F₂) (E₁ ×ᵇ E₂)) where
191196
toFun := Prod.toFun' e₁ e₂
192197
invFun := Prod.invFun' e₁ e₂
@@ -210,8 +215,7 @@ noncomputable def prod : Trivialization (F₁ × F₂) (π (F₁ × F₂) (E₁
210215
target_eq := rfl
211216
proj_toFun _ _ := rfl
212217

213-
@[simp]
214-
theorem baseSet_prod : (prod e₁ e₂).baseSet = e₁.baseSet ∩ e₂.baseSet := rfl
218+
@[deprecated (since := "2025-0619")] alias baseSet_prod := prod_baseSet
215219

216220
theorem prod_symm_apply (x : B) (w₁ : F₁) (w₂ : F₂) :
217221
(prod e₁ e₂).toPartialEquiv.symm (x, w₁, w₂) = ⟨x, e₁.symm x w₁, e₂.symm x w₂⟩ := rfl
@@ -224,7 +228,7 @@ variable [∀ x, Zero (E₁ x)] [∀ x, Zero (E₂ x)] [∀ x : B, TopologicalSp
224228
[∀ x : B, TopologicalSpace (E₂ x)] [FiberBundle F₁ E₁] [FiberBundle F₂ E₂]
225229

226230
/-- The product of two fiber bundles is a fiber bundle. -/
227-
noncomputable instance FiberBundle.prod : FiberBundle (F₁ × F₂) (E₁ ×ᵇ E₂) where
231+
@[simps] noncomputable instance FiberBundle.prod : FiberBundle (F₁ × F₂) (E₁ ×ᵇ E₂) where
228232
totalSpaceMk_isInducing' b := by
229233
rw [← (Prod.isInducing_diag F₁ E₁ F₂ E₂).of_comp_iff]
230234
exact (totalSpaceMk_isInducing F₁ E₁ b).prodMap (totalSpaceMk_isInducing F₂ E₂ b)
@@ -297,6 +301,7 @@ variable {E F}
297301
variable [∀ _b, Zero (E _b)] {K : Type U} [FunLike K B' B] [ContinuousMapClass K B' B]
298302

299303
/-- A fiber bundle trivialization can be pulled back to a trivialization on the pullback bundle. -/
304+
@[simps]
300305
noncomputable def Trivialization.pullback (e : Trivialization F (π F E)) (f : K) :
301306
Trivialization F (π F ((f : B' → B) *ᵖ E)) where
302307
toFun z := (z.proj, (e (Pullback.lift f z)).2)
@@ -336,6 +341,7 @@ noncomputable def Trivialization.pullback (e : Trivialization F (π F E)) (f : K
336341
target_eq := rfl
337342
proj_toFun _ _ := rfl
338343

344+
@[simps]
339345
noncomputable instance FiberBundle.pullback [∀ x, TopologicalSpace (E x)] [FiberBundle F E]
340346
(f : K) : FiberBundle F ((f : B' → B) *ᵖ E) where
341347
totalSpaceMk_isInducing' x :=

Mathlib/Topology/FiberBundle/Trivialization.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,15 @@ instance : CoeFun (Trivialization F proj) fun _ => Z → B × F := ⟨toFun'⟩
298298
instance : Coe (Trivialization F proj) (Pretrivialization F proj) :=
299299
⟨toPretrivialization⟩
300300

301+
/-- See Note [custom simps projection] -/
302+
def Simps.apply (proj : Z → B) (e : Trivialization F proj) : Z → B × F := e
303+
304+
/-- See Note [custom simps projection] -/
305+
noncomputable def Simps.symm_apply (proj : Z → B) (e : Trivialization F proj) : B × F → Z :=
306+
e.toPartialHomeomorph.symm
307+
308+
initialize_simps_projections Trivialization (toFun → apply, invFun → symm_apply)
309+
301310
theorem toPretrivialization_injective :
302311
Function.Injective fun e : Trivialization F proj => e.toPretrivialization := fun e e' h => by
303312
ext1

Mathlib/Topology/Homeomorph/Defs.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,12 @@ def toHomeomorphOfIsInducing (f : X ≃ Y) (hf : IsInducing f) : X ≃ₜ Y :=
366366

367367
@[deprecated (since := "2024-10-28")] alias toHomeomorphOfInducing := toHomeomorphOfIsInducing
368368

369+
@[simp] lemma toHomeomorphOfIsInducing_apply (f : X ≃ Y) (hf : IsInducing f) :
370+
⇑(f.toHomeomorphOfIsInducing hf) = f := rfl
371+
372+
@[simp] lemma toHomeomorphOfIsInducing_symm_apply (f : X ≃ Y) (hf : IsInducing f) :
373+
⇑(f.toHomeomorphOfIsInducing hf).symm = f.symm := rfl
374+
369375
/-- If a bijective map `e : X ≃ Y` is continuous and open, then it is a homeomorphism. -/
370376
@[simps! toEquiv]
371377
def toHomeomorphOfContinuousOpen (e : X ≃ Y) (h₁ : Continuous e) (h₂ : IsOpenMap e) : X ≃ₜ Y :=

Mathlib/Topology/VectorBundle/Basic.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,8 @@ theorem mem_localTrivAt_baseSet : b ∈ (Z.localTrivAt b).baseSet :=
655655
instance fiberBundle : FiberBundle F Z.Fiber :=
656656
Z.toFiberBundleCore.fiberBundle
657657

658+
protected lemma trivializationAt : trivializationAt F Z.Fiber b = Z.localTrivAt b := rfl
659+
658660
instance vectorBundle : VectorBundle R F Z.Fiber where
659661
trivialization_linear' := by
660662
rintro _ ⟨i, rfl⟩

Mathlib/Topology/VectorBundle/Constructions.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ theorem coordChangeL_prod [e₁.IsLinear 𝕜] [e₁'.IsLinear 𝕜] [e₂.IsLin
9696
variable {e₁ e₂} [∀ x : B, TopologicalSpace (E₁ x)] [∀ x : B, TopologicalSpace (E₂ x)]
9797
[FiberBundle F₁ E₁] [FiberBundle F₂ E₂]
9898

99-
theorem prod_apply [e₁.IsLinear 𝕜] [e₂.IsLinear 𝕜] {x : B} (hx₁ : x ∈ e₁.baseSet)
99+
theorem prod_apply' [e₁.IsLinear 𝕜] [e₂.IsLinear 𝕜] {x : B} (hx₁ : x ∈ e₁.baseSet)
100100
(hx₂ : x ∈ e₂.baseSet) (v₁ : E₁ x) (v₂ : E₂ x) :
101101
prod e₁ e₂ ⟨x, (v₁, v₂)⟩ =
102102
⟨x, e₁.continuousLinearEquivAt 𝕜 x hx₁ v₁, e₂.continuousLinearEquivAt 𝕜 x hx₂ v₂⟩ :=
@@ -120,7 +120,7 @@ instance VectorBundle.prod [VectorBundle 𝕜 F₁ E₁] [VectorBundle 𝕜 F₂
120120
rintro _ _ ⟨e₁, e₂, he₁, he₂, rfl⟩ ⟨e₁', e₂', he₁', he₂', rfl⟩
121121
refine (((continuousOn_coordChange 𝕜 e₁ e₁').mono ?_).prod_mapL 𝕜
122122
((continuousOn_coordChange 𝕜 e₂ e₂').mono ?_)).congr ?_ <;>
123-
dsimp only [baseSet_prod, mfld_simps]
123+
dsimp only [prod_baseSet, mfld_simps]
124124
· mfld_set_tac
125125
· mfld_set_tac
126126
· rintro b hb
@@ -142,7 +142,7 @@ theorem Trivialization.continuousLinearEquivAt_prod {e₁ : Trivialization F₁
142142
ext v : 2
143143
obtain ⟨v₁, v₂⟩ := v
144144
rw [(e₁.prod e₂).continuousLinearEquivAt_apply 𝕜, Trivialization.prod]
145-
exact (congr_arg Prod.snd (prod_apply 𝕜 hx.1 hx.2 v₁ v₂) :)
145+
exact (congr_arg Prod.snd (prod_apply' 𝕜 hx.1 hx.2 v₁ v₂) :)
146146

147147
end
148148

0 commit comments

Comments
 (0)