@@ -269,28 +269,43 @@ lemma exists_nhds_square {s : set (α × α)} {x : α} (hx : s ∈ 𝓝 (x, x))
269
269
∃U, is_open U ∧ x ∈ U ∧ set.prod U U ⊆ s :=
270
270
by simpa [nhds_prod_eq, (nhds_basis_opens x).prod_self.mem_iff, and.assoc, and.left_comm] using hx
271
271
272
+ /-- `prod.fst` maps neighborhood of `x : α × β` within the section `prod.snd ⁻¹' {x.2}`
273
+ to `𝓝 x.1`. -/
274
+ lemma map_fst_nhds_within (x : α × β) : map prod.fst (𝓝[prod.snd ⁻¹' {x.2 }] x) = 𝓝 x.1 :=
275
+ begin
276
+ refine le_antisymm (continuous_at_fst.mono_left inf_le_left) (λ s hs, _),
277
+ rcases x with ⟨x, y⟩,
278
+ rw [mem_map, nhds_within, mem_inf_principal, mem_nhds_prod_iff] at hs,
279
+ rcases hs with ⟨u, hu, v, hv, H⟩,
280
+ simp only [prod_subset_iff, mem_singleton_iff, mem_set_of_eq, mem_preimage] at H,
281
+ exact mem_sets_of_superset hu (λ z hz, H _ hz _ (mem_of_nhds hv) rfl)
282
+ end
283
+
284
+ @[simp] lemma map_fst_nhds (x : α × β) : map prod.fst (𝓝 x) = 𝓝 x.1 :=
285
+ le_antisymm continuous_at_fst $ (map_fst_nhds_within x).symm.trans_le (map_mono inf_le_left)
286
+
272
287
/-- The first projection in a product of topological spaces sends open sets to open sets. -/
273
288
lemma is_open_map_fst : is_open_map (@prod.fst α β) :=
289
+ is_open_map_iff_nhds_le.2 $ λ x, (map_fst_nhds x).ge
290
+
291
+ /-- `prod.snd` maps neighborhood of `x : α × β` within the section `prod.fst ⁻¹' {x.1}`
292
+ to `𝓝 x.2`. -/
293
+ lemma map_snd_nhds_within (x : α × β) : map prod.snd (𝓝[prod.fst ⁻¹' {x.1 }] x) = 𝓝 x.2 :=
274
294
begin
275
- rw is_open_map_iff_nhds_le,
276
- rintro ⟨x, y⟩ s hs,
277
- rcases mem_nhds_prod_iff.1 hs with ⟨tx, htx, ty, hty, ht⟩,
278
- simp only [subset_def, prod.forall, mem_prod] at ht,
279
- exact mem_sets_of_superset htx (λ x hx, ht x y ⟨hx, mem_of_nhds hty⟩)
295
+ refine le_antisymm (continuous_at_snd.mono_left inf_le_left) (λ s hs, _),
296
+ rcases x with ⟨x, y⟩,
297
+ rw [mem_map, nhds_within, mem_inf_principal, mem_nhds_prod_iff] at hs,
298
+ rcases hs with ⟨u, hu, v, hv, H⟩,
299
+ simp only [prod_subset_iff, mem_singleton_iff, mem_set_of_eq, mem_preimage] at H,
300
+ exact mem_sets_of_superset hv (λ z hz, H _ (mem_of_nhds hu) _ hz rfl)
280
301
end
281
302
303
+ @[simp] lemma map_snd_nhds (x : α × β) : map prod.snd (𝓝 x) = 𝓝 x.2 :=
304
+ le_antisymm continuous_at_snd $ (map_snd_nhds_within x).symm.trans_le (map_mono inf_le_left)
305
+
282
306
/-- The second projection in a product of topological spaces sends open sets to open sets. -/
283
307
lemma is_open_map_snd : is_open_map (@prod.snd α β) :=
284
- begin
285
- /- This lemma could be proved by composing the fact that the first projection is open, and
286
- exchanging coordinates is a homeomorphism, hence open. As the `prod_comm` homeomorphism is defined
287
- later, we rather go for the direct proof, copy-pasting the proof for the first projection. -/
288
- rw is_open_map_iff_nhds_le,
289
- rintro ⟨x, y⟩ s hs,
290
- rcases mem_nhds_prod_iff.1 hs with ⟨tx, htx, ty, hty, ht⟩,
291
- simp only [subset_def, prod.forall, mem_prod] at ht,
292
- exact mem_sets_of_superset hty (λ y hy, ht x y ⟨mem_of_nhds htx, hy⟩)
293
- end
308
+ is_open_map_iff_nhds_le.2 $ λ x, (map_snd_nhds x).ge
294
309
295
310
/-- A product set is open in a product space if and only if each factor is open, or one of them is
296
311
empty -/
0 commit comments