Built with
doc-gen4 , running Lean4.
Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents.
Use
Ctrl+β Ctrl+β to navigate,
Ctrl+π±οΈ to focus.
On Mac, use
Cmd instead of
Ctrl .
/-
Copyright Β© 2021 NicolΓ² Cavalleri. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: NicolΓ² Cavalleri
! This file was ported from Lean 3 source module data.bundle
! leanprover-community/mathlib commit 9aba7801eeecebb61f58a5763c2b6dd1b47dc6ef
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Module.Basic
/-!
# Bundle
Basic data structure to implement fiber bundles, vector bundles (maybe fibrations?), etc. This file
should contain all possible results that do not involve any topology.
We represent a bundle `E` over a base space `B` as a dependent type `E : B β Type _`.
We provide a type synonym of `Ξ£ x, E x` as `Bundle.TotalSpace E`, to be able to endow it with
a topology which is not the disjoint union topology `Sigma.TopologicalSpace`. In general, the
constructions of fiber bundles we will make will be of this form.
## Main Definitions
* `Bundle.TotalSpace` the total space of a bundle.
* `Bundle.TotalSpace.proj` the projection from the total space to the base space.
* `Bundle.totalSpaceMk` the constructor for the total space.
## References
- https://en.wikipedia.org/wiki/Bundle_(mathematics)
-/
namespace Bundle
variable { B : Type _ } ( E : B β Type _ )
/-- `Bundle.TotalSpace E` is the total space of the bundle `Ξ£ x, E x`.
This type synonym is used to avoid conflicts with general sigma types.
-/
def TotalSpace :=
Ξ£ x , E x
#align bundle.total_space Bundle.TotalSpace : {B : Type u_1} β (B β Type u_2 ) β Type (maxu_1u_2) Bundle.TotalSpace
instance [ Inhabited : Sort ?u.45 β Sort (max1?u.45) Inhabited B ] [ Inhabited : Sort ?u.48 β Sort (max1?u.48) Inhabited ( E default )] : Inhabited : Sort ?u.204 β Sort (max1?u.204) Inhabited ( TotalSpace : {B : Type ?u.206} β (B β Type ?u.205 ) β Type (max?u.206?u.205) TotalSpace E ) :=
β¨β¨ default , default β©β©
variable { E }
/-- `bundle.TotalSpace.proj` is the canonical projection `Bundle.TotalSpace E β B` from the
total space to the base space. -/
@[ simp , reducible]
def TotalSpace.proj : TotalSpace : {B : Type ?u.635} β (B β Type ?u.634 ) β Type (max?u.635?u.634) TotalSpace E β B :=
Sigma.fst : {Ξ± : Type ?u.643} β {Ξ² : Ξ± β Type ?u.642 } β Sigma Ξ² β Ξ± Sigma.fst
#align bundle.total_space.proj Bundle.TotalSpace.proj
-- this notation won't be used in the pretty-printer
set_option quotPrecheck false in
/-- The canonical projection defining a bundle. -/
scoped notation "Ο" E => @Bundle.TotalSpace.proj _ E
/-- Constructor for the total space of a bundle. -/
@[ simp , reducible]
def totalSpaceMk ( b : B ) ( a : E b ) : Bundle.TotalSpace : {B : Type ?u.3029} β (B β Type ?u.3028 ) β Type (max?u.3029?u.3028) Bundle.TotalSpace E :=
β¨ b , a β©
#align bundle.total_space_mk Bundle.totalSpaceMk : {B : Type u_1} β {E : B β Type u_2 } β (b : B ) β E b β TotalSpace E Bundle.totalSpaceMk
theorem TotalSpace.proj_mk { x : B } { y : E x } : ( totalSpaceMk : {B : Type ?u.3134} β {E : B β Type ?u.3133 } β (b : B ) β E b β TotalSpace E totalSpaceMk x y ). proj = x :=
rfl : β {Ξ± : Sort ?u.3153} {a : Ξ± }, a = a rfl
#align bundle.total_space.proj_mk Bundle.TotalSpace.proj_mk
theorem sigma_mk_eq_totalSpaceMk : β {B : Type u_1} {E : B β Type u_2 } {x : B } {y : E x }, { fst := x , snd := y } = totalSpaceMk x y sigma_mk_eq_totalSpaceMk { x : B } { y : E x } : Sigma.mk : {Ξ± : Type ?u.3179} β {Ξ² : Ξ± β Type ?u.3178 } β (fst : Ξ± ) β Ξ² fst β Sigma Ξ² Sigma.mk x y = totalSpaceMk : {B : Type ?u.3184} β {E : B β Type ?u.3183 } β (b : B ) β E b β TotalSpace E totalSpaceMk x y :=
rfl : β {Ξ± : Sort ?u.3195} {a : Ξ± }, a = a rfl
#align bundle.sigma_mk_eq_total_space_mk Bundle.sigma_mk_eq_totalSpaceMk : β {B : Type u_1} {E : B β Type u_2 } {x : B } {y : E x }, { fst := x , snd := y } = totalSpaceMk x y Bundle.sigma_mk_eq_totalSpaceMk
theorem TotalSpace.mk_cast { x x' : B } ( h : x = x' ) ( b : E x ) :
totalSpaceMk : {B : Type ?u.3232} β {E : B β Type ?u.3231 } β (b : B ) β E b β TotalSpace E totalSpaceMk x' ( cast : {Ξ± Ξ² : Sort ?u.3235} β Ξ± = Ξ² β Ξ± β Ξ² cast ( congr_arg : β {Ξ± : Sort ?u.3239} {Ξ² : Sort ?u.3238} {aβ aβ : Ξ± } (f : Ξ± β Ξ² ), aβ = aβ β f aβ = f aβ congr_arg E h ) b ) = totalSpaceMk : {B : Type ?u.3258} β {E : B β Type ?u.3257 } β (b : B ) β E b β TotalSpace E totalSpaceMk x b := by
B : Type u_1E : B β Type u_2x, x' : B h : x = x' b : E x subst h
B : Type u_1E : B β Type u_2x, x' : B h : x = x' b : E x rfl
#align bundle.total_space.mk_cast Bundle.TotalSpace.mk_cast
theorem TotalSpace.eta ( z : TotalSpace : {B : Type ?u.3311} β (B β Type ?u.3310 ) β Type (max?u.3311?u.3310) TotalSpace E ) : totalSpaceMk : {B : Type ?u.3320} β {E : B β Type ?u.3319 } β (b : B ) β E b β TotalSpace E totalSpaceMk z . proj z . 2 : {Ξ± : Type ?u.3335} β {Ξ² : Ξ± β Type ?u.3334 } β (self : Sigma Ξ² ) β Ξ² self .fst 2 = z :=
Sigma.eta : β {Ξ± : Type ?u.3348} {Ξ² : Ξ± β Type ?u.3349 } (x : (a : Ξ± ) Γ Ξ² a ), { fst := x .fst , snd := x .snd } = x Sigma.eta z
#align bundle.total_space.eta Bundle.TotalSpace.eta
instance { x : B } : CoeTC : Sort ?u.3383 β Sort ?u.3382 β Sort (max(max1?u.3383)?u.3382) CoeTC ( E x ) ( TotalSpace : {B : Type ?u.3385} β (B β Type ?u.3384 ) β Type (max?u.3385?u.3384) TotalSpace E ) :=
β¨ totalSpaceMk : {B : Type ?u.3402} β {E : B β Type ?u.3401 } β (b : B ) β E b β TotalSpace E totalSpaceMk x β©
-- porting note: removed simp attribute, variable as head symbol
theorem coe_fst ( x : B ) ( v : E x ) : ( v : TotalSpace : {B : Type ?u.3516} β (B β Type ?u.3515 ) β Type (max?u.3516?u.3515) TotalSpace E ). fst : {Ξ± : Type ?u.3609} β {Ξ² : Ξ± β Type ?u.3608 } β Sigma Ξ² β Ξ± fst = x :=
rfl : β {Ξ± : Sort ?u.3621} {a : Ξ± }, a = a rfl
#align bundle.coe_fst Bundle.coe_fst
-- porting note: removed simp attribute, variable as head symbol
theorem coe_snd { x : B } { y : E x } : ( y : TotalSpace : {B : Type ?u.3649} β (B β Type ?u.3648 ) β Type (max?u.3649?u.3648) TotalSpace E ). snd : {Ξ± : Type ?u.3742} β {Ξ² : Ξ± β Type ?u.3741 } β (self : Sigma Ξ² ) β Ξ² self .fst snd = y :=
rfl : β {Ξ± : Sort ?u.3755} {a : Ξ± }, a = a rfl
#align bundle.coe_snd Bundle.coe_snd
-- porting note: removed `to_total_space_coe`, syntactic tautology
#noalign bundle.to_total_space_coe
-- mathport name: Β«expr Γα΅ Β»
/-- The direct sum of two bundles. -/
notation :100 -- notation for the direct sum of two bundles over the same base
Eβ " Γα΅ " Eβ => fun x => Eβ x Γ Eβ x
/-- `Bundle.Trivial B F` is the trivial bundle over `B` of fiber `F`. -/
def Trivial : (B : Type ?u.6007) β Type ?u.6010 β B β Type ?u.6015 Trivial ( B : Type _ ) ( F : Type _ ) : B β Type _ :=
Function.const : {Ξ± : Sort ?u.6020} β (Ξ² : Sort ?u.6019) β Ξ± β Ξ² β Ξ± Function.const B F
#align bundle.trivial Bundle.Trivial : (B : Type u_1) β Type u_2 β B β Type u_2 Bundle.Trivial
instance { F : Type _ } [ Inhabited : Sort ?u.6045 β Sort (max1?u.6045) Inhabited F ] { b : B } : Inhabited : Sort ?u.6050 β Sort (max1?u.6050) Inhabited ( Bundle.Trivial : (B : Type ?u.6052) β Type ?u.6051 β B β Type ?u.6051 Bundle.Trivial B F b ) :=
β¨( default : F )β©
/-- The trivial bundle, unlike other bundles, has a canonical projection on the fiber. -/
def Trivial.projSnd ( B : Type _ ) ( F : Type _ ) : TotalSpace : {B : Type ?u.6286} β (B β Type ?u.6285 ) β Type (max?u.6286?u.6285) TotalSpace ( Bundle.Trivial : (B : Type ?u.6289) β Type ?u.6288 β B β Type ?u.6288 Bundle.Trivial B F ) β F :=
Sigma.snd : {Ξ± : Type ?u.6300} β {Ξ² : Ξ± β Type ?u.6299 } β (self : Sigma Ξ² ) β Ξ² self .fst Sigma.snd
#align bundle.trivial.proj_snd Bundle.Trivial.projSnd
section Pullback
variable { B' : Type _ }
/-- The pullback of a bundle `E` over a base `B` under a map `f : B' β B`, denoted by `Pullback f E`
or `f *α΅ E`, is the bundle over `B'` whose fiber over `b'` is `E (f b')`. -/
-- porting note: `has_nonempty_instance` linter not found
-- @[nolint has_nonempty_instance]
def Pullback : (f : B' β B ) β (E : B β Type ?u.6401 ) β ?m.6405 f E Pullback ( f : B' β B ) ( E : B β Type _ ) := fun x => E ( f x )
#align bundle.pullback Bundle.Pullback : {B : Type u_1} β {B' : Type u_2} β (B' β B ) β (B β Type u_3 ) β B' β Type u_3 Bundle.Pullback
-- mathport name: Β«expr *α΅ Β»
@[inherit_doc]
notation f " *α΅ " E => Pullback : {B : Type u_1} β {B' : Type u_2} β (B' β B ) β (B β Type u_3 ) β B' β Type u_3 Pullback f E
/-- Natural embedding of the total space of `f *α΅ E` into `B' Γ TotalSpace E`. -/
@[ simp ]
def pullbackTotalSpaceEmbedding ( f : B' β B ) : TotalSpace : {B : Type ?u.14291} β (B β Type ?u.14290 ) β Type (max?u.14291?u.14290) TotalSpace ( f *α΅ E ) β B' Γ TotalSpace : {B : Type ?u.14313} β (B β Type ?u.14312 ) β Type (max?u.14313?u.14312) TotalSpace E := fun z =>
( z . proj , totalSpaceMk : {B : Type ?u.14341} β {E : B β Type ?u.14340 } β (b : B ) β E b β TotalSpace E totalSpaceMk ( f z . proj ) z . 2 : {Ξ± : Type ?u.14357} β {Ξ² : Ξ± β Type ?u.14356 } β (self : Sigma Ξ² ) β Ξ² self .fst 2)
#align bundle.pullback_total_space_embedding Bundle.pullbackTotalSpaceEmbedding
/-- The base map `f : B' β B` lifts to a canonical map on the total spaces. -/
def Pullback.lift ( f : B' β B ) : TotalSpace : {B : Type ?u.14527} β (B β Type ?u.14526 ) β Type (max?u.14527?u.14526) TotalSpace ( f *α΅ E ) β TotalSpace : {B : Type ?u.14547} β (B β Type ?u.14546 ) β Type (max?u.14547?u.14546) TotalSpace E := fun z =>
totalSpaceMk : {B : Type ?u.14560} β {E : B β Type ?u.14559 } β (b : B ) β E b β TotalSpace E totalSpaceMk ( f z . proj ) z . 2 : {Ξ± : Type ?u.14579} β {Ξ² : Ξ± β Type ?u.14578 } β (self : Sigma Ξ² ) β Ξ² self .fst 2
#align bundle.pullback.lift Bundle.Pullback.lift
@[ simp ]
theorem Pullback.proj_lift ( f : B' β B ) ( x : TotalSpace : {B : Type ?u.14718} β (B β Type ?u.14717 ) β Type (max?u.14718?u.14717) TotalSpace ( f *α΅ E )) :
( Pullback.lift f x ). proj = f x . 1 : {Ξ± : Type ?u.14773} β {Ξ² : Ξ± β Type ?u.14772 } β Sigma Ξ² β Ξ± 1 :=
rfl : β {Ξ± : Sort ?u.14785} {a : Ξ± }, a = a rfl
#align bundle.pullback.proj_lift Bundle.Pullback.proj_lift
@[ simp ]
theorem Pullback.lift_mk ( f : B' β B ) ( x : B' ) ( y : E ( f x )) :
Pullback.lift f ( totalSpaceMk : {B : Type ?u.14847} β {E : B β Type ?u.14846 } β (b : B ) β E b β TotalSpace E totalSpaceMk x y ) = totalSpaceMk : {B : Type ?u.14859} β {E : B β Type ?u.14858 } β (b : B ) β E b β TotalSpace E totalSpaceMk ( f x ) y :=
rfl : β {Ξ± : Sort ?u.14871} {a : Ξ± }, a = a rfl
#align bundle.pullback.lift_mk Bundle.Pullback.lift_mk
theorem pullbackTotalSpaceEmbedding_snd ( f : B' β B ) ( x : TotalSpace : {B : Type ?u.14932} β (B β Type ?u.14931 ) β Type (max?u.14932?u.14931) TotalSpace ( f *α΅ E )) :
( pullbackTotalSpaceEmbedding f x ). 2 : {Ξ± : Type ?u.14976} β {Ξ² : Type ?u.14975} β Ξ± Γ Ξ² β Ξ² 2 = Pullback.lift f x :=
rfl : β {Ξ± : Sort ?u.15007} {a : Ξ± }, a = a rfl
#align bundle.pullback_total_space_embedding_snd Bundle.pullbackTotalSpaceEmbedding_snd
end Pullback
section FiberStructures
variable [β x , AddCommMonoid : Type ?u.16918 β Type ?u.16918 AddCommMonoid ( E x )]
@[ simp ]
theorem coe_snd_map_apply ( x : B ) ( v w : E x ) :
(β( v + w ) : TotalSpace : {B : Type ?u.15065} β (B β Type ?u.15064 ) β Type (max?u.15065?u.15064) TotalSpace E ). snd : {Ξ± : Type ?u.15984} β {Ξ² : Ξ± β Type ?u.15983 } β (self : Sigma Ξ² ) β Ξ² self .fst snd = ( v : TotalSpace : {B : Type ?u.15997} β (B β Type ?u.15996 ) β Type (max?u.15997?u.15996) TotalSpace E ). snd : {Ξ± : Type ?u.16063} β {Ξ² : Ξ± β Type ?u.16062 } β (self : Sigma Ξ² ) β Ξ² self .fst snd + ( w : TotalSpace : {B : Type ?u.16070} β (B β Type ?u.16069 ) β Type (max?u.16070?u.16069) TotalSpace E ). snd : {Ξ± : Type ?u.16136} β {Ξ² : Ξ± β Type ?u.16135 } β (self : Sigma Ξ² ) β Ξ² self .fst snd :=
rfl : β {Ξ± : Sort ?u.16862} {a : Ξ± }, a = a rfl
#align bundle.coe_snd_map_apply Bundle.coe_snd_map_apply
variable ( R : Type _ : Type (?u.16922+1) Type _) [ Semiring : Type ?u.16981 β Type ?u.16981 Semiring R ] [β x , Module R ( E x )]
@[ simp ]
theorem coe_snd_map_smul ( x : B ) ( r : R ) ( v : E x ) :
(β( r β’ v ) : TotalSpace : {B : Type ?u.17027} β (B β Type ?u.17026 ) β Type (max?u.17027?u.17026) TotalSpace E ). snd : {Ξ± : Type ?u.17982} β {Ξ² : Ξ± β Type ?u.17981 } β (self : Sigma Ξ² ) β Ξ² self .fst snd = r β’ ( v : TotalSpace : {B : Type ?u.18000} β (B β Type ?u.17999 ) β Type (max?u.18000?u.17999) TotalSpace E ). snd : {Ξ± : Type ?u.18066} β {Ξ² : Ξ± β Type ?u.18065 } β (self : Sigma Ξ² ) β Ξ² self .fst snd :=
rfl : β {Ξ± : Sort ?u.18717} {a : Ξ± }, a = a rfl
#align bundle.coe_snd_map_smul Bundle.coe_snd_map_smul
end FiberStructures
section TrivialInstances
variable { F : Type _ : Type (?u.18886+1) Type _} { R : Type _ : Type (?u.18977+1) Type _} [ Semiring : Type ?u.18892 β Type ?u.18892 Semiring R ] ( b : B )
instance [ AddCommMonoid : Type ?u.18809 β Type ?u.18809 AddCommMonoid F ] : AddCommMonoid : Type ?u.18812 β Type ?u.18812 AddCommMonoid ( Bundle.Trivial : (B : Type ?u.18814) β Type ?u.18813 β B β Type ?u.18813 Bundle.Trivial B F b ) :=
βΉAddCommMonoid FβΊ
instance [ AddCommGroup : Type ?u.18897 β Type ?u.18897 AddCommGroup F ] : AddCommGroup : Type ?u.18900 β Type ?u.18900 AddCommGroup ( Bundle.Trivial : (B : Type ?u.18902) β Type ?u.18901 β B β Type ?u.18901 Bundle.Trivial B F b ) :=
βΉAddCommGroup FβΊ
instance [ AddCommMonoid : Type ?u.18985 β Type ?u.18985 AddCommMonoid F ] [ Module R F ] : Module R ( Bundle.Trivial : (B : Type ?u.19017) β Type ?u.19016 β B β Type ?u.19016 Bundle.Trivial B F b ) :=
βΉModule R FβΊ