@@ -169,9 +169,9 @@ by rw [e.mk_symm hb, e.apply_symm_apply (e.mk_mem_target.mpr hb)]
169
169
170
170
/-- A pretrivialization for a topological vector bundle defines linear equivalences between the
171
171
fibers and the model space. -/
172
- def linear_equiv_at (e : pretrivialization R F E) (b : B)
173
- (hb : b ∈ e.base_set) : E b ≃ₗ[R] F :=
174
- { to_fun := λ y, (e ⟨b, y⟩ ).2 ,
172
+ @[simps] def linear_equiv_at (e : pretrivialization R F E) (b : B) (hb : b ∈ e.base_set) :
173
+ E b ≃ₗ[R] F :=
174
+ { to_fun := λ y, (e (total_space_mk E b y) ).2 ,
175
175
inv_fun := e.symm b,
176
176
left_inv := e.symm_apply_apply_mk hb,
177
177
right_inv := λ v, by simp_rw [e.apply_mk_symm hb v],
@@ -393,9 +393,9 @@ namespace trivialization
393
393
394
394
/-- In a topological vector bundle, a trivialization in the fiber (which is a priori only linear)
395
395
is in fact a continuous linear equiv between the fibers and the model fiber. -/
396
- def continuous_linear_equiv_at (e : trivialization R F E) (b : B)
396
+ @[simps apply symm_apply] def continuous_linear_equiv_at (e : trivialization R F E) (b : B)
397
397
(hb : b ∈ e.base_set) : E b ≃L[R] F :=
398
- { to_fun := λ y, (e ⟨b, y⟩ ).2 ,
398
+ { to_fun := λ y, (e (total_space_mk E b y) ).2 ,
399
399
inv_fun := e.symm b,
400
400
continuous_to_fun := continuous_snd.comp (e.to_local_homeomorph.continuous_on.comp_continuous
401
401
(total_space_mk_inducing R F E b).continuous (λ x, e.mem_source.mpr hb)),
@@ -406,9 +406,6 @@ def continuous_linear_equiv_at (e : trivialization R F E) (b : B)
406
406
end ,
407
407
.. e.to_pretrivialization.linear_equiv_at b hb }
408
408
409
- @[simp] lemma continuous_linear_equiv_at_apply (e : trivialization R F E) (b : B)
410
- (hb : b ∈ e.base_set) (y : E b) : e.continuous_linear_equiv_at b hb y = (e ⟨b, y⟩).2 := rfl
411
-
412
409
@[simp] lemma continuous_linear_equiv_at_apply' (e : trivialization R F E)
413
410
(x : total_space E) (hx : x ∈ e.source) :
414
411
e.continuous_linear_equiv_at (proj E x) (e.mem_source.1 hx) x.2 = (e x).2 := by { cases x, refl }
@@ -902,18 +899,18 @@ variables (E₁ : B → Type*) (E₂ : B → Type*)
902
899
variables [topological_space (total_space E₁)] [topological_space (total_space E₂)]
903
900
904
901
/-- Equip the total space of the fibrewise product of two topological vector bundles `E₁`, `E₂` with
905
- the induced topology from the diagonal embedding into `( total_space E₁) × ( total_space E₂) `. -/
902
+ the induced topology from the diagonal embedding into `total_space E₁ × total_space E₂`. -/
906
903
instance prod.topological_space :
907
904
topological_space (total_space (E₁ ×ᵇ E₂)) :=
908
905
topological_space.induced
909
906
(λ p, ((⟨p.1 , p.2 .1 ⟩ : total_space E₁), (⟨p.1 , p.2 .2 ⟩ : total_space E₂)))
910
- (by apply_instance : topological_space (( total_space E₁) × ( total_space E₂) ))
907
+ (by apply_instance : topological_space (total_space E₁ × total_space E₂))
911
908
912
909
/-- The diagonal map from the total space of the fibrewise product of two topological vector bundles
913
- `E₁`, `E₂` into `( total_space E₁) × ( total_space E₂) ` is `inducing`. -/
910
+ `E₁`, `E₂` into `total_space E₁ × total_space E₂` is `inducing`. -/
914
911
lemma prod.inducing_diag : inducing
915
912
(λ p, (⟨p.1 , p.2 .1 ⟩, ⟨p.1 , p.2 .2 ⟩) :
916
- total_space (E₁ ×ᵇ E₂) → ( total_space E₁) × ( total_space E₂) ) :=
913
+ total_space (E₁ ×ᵇ E₂) → total_space E₁ × total_space E₂) :=
917
914
⟨rfl⟩
918
915
919
916
end defs
@@ -965,95 +962,50 @@ end
965
962
966
963
variables (e₁ e₂)
967
964
968
- variables [Π x : B, topological_space (E₁ x)] [Π x : B, topological_space (E₂ x)]
969
- [topological_vector_bundle R F₁ E₁] [topological_vector_bundle R F₂ E₂]
970
-
971
965
/-- Given trivializations `e₁`, `e₂` for vector bundles `E₁`, `E₂` over a base `B`, the inverse
972
966
function for the construction `topological_vector_bundle.trivialization.prod`, the induced
973
967
trivialization for the direct sum of `E₁` and `E₂`. -/
974
968
def prod.inv_fun' (p : B × (F₁ × F₂)) : total_space (E₁ ×ᵇ E₂) :=
975
- begin
976
- obtain ⟨x, w₁, w₂⟩ := p,
977
- refine ⟨x, _, _⟩,
978
- { by_cases h : x ∈ e₁.base_set,
979
- { exact (e₁.continuous_linear_equiv_at x h).symm w₁ },
980
- { exact 0 } },
981
- { by_cases h : x ∈ e₂.base_set,
982
- { exact (e₂.continuous_linear_equiv_at x h).symm w₂ },
983
- { exact 0 } },
984
- end
969
+ ⟨p.1 , e₁.symm p.1 p.2 .1 , e₂.symm p.1 p.2 .2 ⟩
985
970
986
971
variables {e₁ e₂}
987
972
988
- lemma prod.inv_fun'_apply {x : B} (hx₁ : x ∈ e₁.base_set) (hx₂ : x ∈ e₂.base_set)
989
- (w₁ : F₁) (w₂ : F₂) :
990
- prod.inv_fun' e₁ e₂ ⟨x, w₁, w₂⟩
991
- = ⟨x, ((e₁.continuous_linear_equiv_at x hx₁).symm w₁,
992
- (e₂.continuous_linear_equiv_at x hx₂).symm w₂)⟩ :=
993
- begin
994
- dsimp [prod.inv_fun'],
995
- rw [dif_pos, dif_pos],
996
- end
997
-
998
973
lemma prod.left_inv {x : total_space (E₁ ×ᵇ E₂)}
999
974
(h : x ∈ proj (E₁ ×ᵇ E₂) ⁻¹' (e₁.base_set ∩ e₂.base_set)) :
1000
975
prod.inv_fun' e₁ e₂ (prod.to_fun' e₁ e₂ x) = x :=
1001
976
begin
1002
977
obtain ⟨x, v₁, v₂⟩ := x,
1003
- simp only [prod.to_fun', prod.inv_fun', sigma.mk.inj_iff, true_and, eq_self_iff_true,
1004
- prod.mk.inj_iff, heq_iff_eq],
1005
- split,
1006
- { rw [dif_pos, ← e₁.continuous_linear_equiv_at_apply x h.1 ,
1007
- continuous_linear_equiv.symm_apply_apply] },
1008
- { rw [dif_pos, ← e₂.continuous_linear_equiv_at_apply x h.2 ,
1009
- continuous_linear_equiv.symm_apply_apply] },
978
+ obtain ⟨h₁ : x ∈ e₁.base_set, h₂ : x ∈ e₂.base_set⟩ := h,
979
+ simp only [prod.to_fun', prod.inv_fun', symm_apply_apply_mk, h₁, h₂]
1010
980
end
1011
981
1012
982
lemma prod.right_inv {x : B × F₁ × F₂}
1013
983
(h : x ∈ (e₁.base_set ∩ e₂.base_set) ×ˢ (univ : set (F₁ × F₂))) :
1014
984
prod.to_fun' e₁ e₂ (prod.inv_fun' e₁ e₂ x) = x :=
1015
985
begin
1016
986
obtain ⟨x, w₁, w₂⟩ := x,
1017
- obtain ⟨h, -⟩ := h,
1018
- dsimp only [prod.to_fun', prod.inv_fun'],
1019
- simp only [prod.mk.inj_iff, eq_self_iff_true, true_and],
1020
- split,
1021
- { rw [dif_pos, ← e₁.continuous_linear_equiv_at_apply x h.1 ,
1022
- continuous_linear_equiv.apply_symm_apply] },
1023
- { rw [dif_pos, ← e₂.continuous_linear_equiv_at_apply x h.2 ,
1024
- continuous_linear_equiv.apply_symm_apply] },
987
+ obtain ⟨⟨h₁ : x ∈ e₁.base_set, h₂ : x ∈ e₂.base_set⟩, -⟩ := h,
988
+ simp only [prod.to_fun', prod.inv_fun', apply_mk_symm, h₁, h₂]
1025
989
end
1026
990
1027
991
lemma prod.continuous_inv_fun :
1028
992
continuous_on (prod.inv_fun' e₁ e₂) ((e₁.base_set ∩ e₂.base_set) ×ˢ (univ : set (F₁ × F₂))) :=
1029
993
begin
1030
994
rw (prod.inducing_diag E₁ E₂).continuous_on_iff,
1031
- suffices : continuous_on (λ p : B × F₁ × F₂,
1032
- (e₁.to_local_homeomorph.symm ⟨p.1 , p.2 .1 ⟩, e₂.to_local_homeomorph.symm ⟨p.1 , p.2 .2 ⟩))
1033
- ((e₁.base_set ∩ e₂.base_set) ×ˢ (univ : set (F₁ × F₂))),
1034
- { refine this.congr _,
1035
- rintros ⟨b, v₁, v₂⟩ ⟨⟨h₁, h₂⟩, _⟩,
1036
- dsimp at ⊢ h₁ h₂,
1037
- rw [prod.inv_fun'_apply h₁ h₂, e₁.symm_apply_eq_mk_continuous_linear_equiv_at_symm b h₁,
1038
- e₂.symm_apply_eq_mk_continuous_linear_equiv_at_symm b h₂] },
1039
995
have H₁ : continuous (λ p : B × F₁ × F₂, ((p.1 , p.2 .1 ), (p.1 , p.2 .2 ))) :=
1040
996
(continuous_id.prod_map continuous_fst).prod_mk (continuous_id.prod_map continuous_snd),
1041
- have H₂ := e₁.to_local_homeomorph.symm.continuous_on.prod_map
1042
- e₂.to_local_homeomorph.symm.continuous_on,
1043
- refine H₂.comp H₁.continuous_on (λ x h, ⟨_, _⟩),
1044
- { dsimp,
1045
- rw e₁.target_eq,
1046
- exact ⟨h.1 .1 , mem_univ _⟩ },
1047
- { dsimp,
1048
- rw e₂.target_eq,
1049
- exact ⟨h.1 .2 , mem_univ _⟩ }
997
+ refine (e₁.continuous_on_symm.prod_map e₂.continuous_on_symm).comp H₁.continuous_on _,
998
+ exact λ x h, ⟨⟨h.1 .1 , mem_univ _⟩, ⟨h.1 .2 , mem_univ _⟩⟩
1050
999
end
1051
1000
1052
1001
variables (e₁ e₂)
1002
+ variables [Π x : B, topological_space (E₁ x)] [Π x : B, topological_space (E₂ x)]
1003
+ [topological_vector_bundle R F₁ E₁] [topological_vector_bundle R F₂ E₂]
1053
1004
1054
1005
/-- Given trivializations `e₁`, `e₂` for vector bundles `E₁`, `E₂` over a base `B`, the induced
1055
1006
trivialization for the direct sum of `E₁` and `E₂`, whose base set is `e₁.base_set ∩ e₂.base_set`.
1056
1007
-/
1008
+ @[nolint unused_arguments]
1057
1009
def prod : trivialization R (F₁ × F₂) (E₁ ×ᵇ E₂) :=
1058
1010
{ to_fun := prod.to_fun' e₁ e₂,
1059
1011
inv_fun := prod.inv_fun' e₁ e₂,
@@ -1066,7 +1018,7 @@ def prod : trivialization R (F₁ × F₂) (E₁ ×ᵇ E₂) :=
1066
1018
open_source := begin
1067
1019
refine (e₁.open_base_set.inter e₂.open_base_set).preimage _,
1068
1020
have : continuous (proj E₁) := continuous_proj R B F₁,
1069
- exact this.comp (continuous_fst.comp ( prod.inducing_diag E₁ E₂).continuous) ,
1021
+ exact this.comp (prod.inducing_diag E₁ E₂).continuous.fst ,
1070
1022
end ,
1071
1023
open_target := (e₁.open_base_set.inter e₂.open_base_set).prod is_open_univ,
1072
1024
continuous_to_fun := prod.continuous_to_fun,
@@ -1093,11 +1045,9 @@ lemma prod_apply {x : B} (hx₁ : x ∈ e₁.base_set) (hx₂ : x ∈ e₂.base_
1093
1045
= ⟨x, e₁.continuous_linear_equiv_at x hx₁ v₁, e₂.continuous_linear_equiv_at x hx₂ v₂⟩ :=
1094
1046
rfl
1095
1047
1096
- lemma prod_symm_apply {x : B} (hx₁ : x ∈ e₁.base_set) (hx₂ : x ∈ e₂.base_set) (w₁ : F₁) (w₂ : F₂) :
1097
- (prod e₁ e₂).to_local_equiv.symm (x, (w₁, w₂))
1098
- = ⟨x, ((e₁.continuous_linear_equiv_at x hx₁).symm w₁,
1099
- (e₂.continuous_linear_equiv_at x hx₂).symm w₂)⟩ :=
1100
- prod.inv_fun'_apply hx₁ hx₂ w₁ w₂
1048
+ lemma prod_symm_apply (x : B) (w₁ : F₁) (w₂ : F₂) : (prod e₁ e₂).to_local_equiv.symm (x, w₁, w₂)
1049
+ = ⟨x, e₁.symm x w₁, e₂.symm x w₂⟩ :=
1050
+ rfl
1101
1051
1102
1052
end trivialization
1103
1053
@@ -1128,7 +1078,7 @@ instance _root_.bundle.prod.topological_vector_bundle :
1128
1078
let ε := coord_change he₁ he'₁,
1129
1079
let η := coord_change he₂ he'₂,
1130
1080
have fact : (s ∩ t) ×ˢ (univ : set $ F₁ × F₂) =
1131
- (e₁.base_set ∩ e₂.base_set ∩ (e'₁.base_set ∩ e'₂.base_set)) ×ˢ (univ : set $ F₁ × F₂),
1081
+ (e₁.base_set ∩ e₂.base_set ∩ (e'₁.base_set ∩ e'₂.base_set)) ×ˢ (univ : set $ F₁ × F₂),
1132
1082
by mfld_set_tac,
1133
1083
refine ⟨s ∩ t, _, _, λ b, (ε b).prod (η b), _, _⟩,
1134
1084
{ rw fact,
@@ -1139,14 +1089,13 @@ instance _root_.bundle.prod.topological_vector_bundle :
1139
1089
have hη := (continuous_on_coord_change he₂ he'₂).mono (inter_subset_right s t),
1140
1090
exact hε.prod_map_equivL R hη },
1141
1091
{ rintros b ⟨hbs, hbt⟩ ⟨u, v⟩,
1142
- have h : (e₁.prod e₂).to_local_homeomorph.symm _ = _ := prod_symm_apply hbs.1 hbt.1 u v,
1143
- simp only [ε, η, h, prod_apply hbs.2 hbt.2 ,
1144
- ← comp_continuous_linear_equiv_at_eq_coord_change he₁ he'₁ hbs,
1092
+ have h : (e₁.prod e₂).to_local_homeomorph.symm _ = _ := prod_symm_apply b u v,
1093
+ simp_rw [ε, local_equiv.coe_trans, local_homeomorph.coe_coe_symm, local_homeomorph.coe_coe,
1094
+ function.comp_app, h, η, topological_vector_bundle.trivialization.coe_coe,
1095
+ prod_apply hbs.2 hbt.2 , ← comp_continuous_linear_equiv_at_eq_coord_change he₁ he'₁ hbs,
1145
1096
← comp_continuous_linear_equiv_at_eq_coord_change he₂ he'₂ hbt,
1146
- eq_self_iff_true, function.comp_app, local_equiv.coe_trans, local_homeomorph.coe_coe,
1147
- local_homeomorph.coe_coe_symm, prod.mk.inj_iff,
1148
- topological_vector_bundle.trivialization.coe_coe, true_and,
1149
- continuous_linear_equiv.prod_apply, continuous_linear_equiv.trans_apply] },
1097
+ continuous_linear_equiv.prod_apply, continuous_linear_equiv.trans_apply,
1098
+ continuous_linear_equiv_at_symm_apply] },
1150
1099
end }
1151
1100
1152
1101
variables {R F₁ E₁ F₂ E₂}
0 commit comments