@@ -751,6 +751,7 @@ end quotient
751
751
752
752
section pi
753
753
variables {ι : Type *} {π : ι → Type *}
754
+ open topological_space
754
755
755
756
lemma continuous_pi [topological_space α] [∀i, topological_space (π i)] {f : α → Πi:ι, π i}
756
757
(h : ∀i, continuous (λa, f a i)) : continuous f :=
@@ -780,6 +781,73 @@ begin
780
781
⟨a, assume i, (ha i).left, assume i, map_le_iff_le_comap.mp $ (ha i).right⟩
781
782
end
782
783
784
+ lemma is_open_set_pi [∀a, topological_space (π a)] {i : set ι} {s : Πa, set (π a)}
785
+ (hi : finite i) (hs : ∀a∈i, is_open (s a)) : is_open (pi i s) :=
786
+ by rw [pi_def]; exact (is_open_bInter hi $ assume a ha, continuous_apply a _ $ hs a ha)
787
+
788
+ lemma pi_eq_generate_from [∀a, topological_space (π a)] :
789
+ Pi.topological_space =
790
+ generate_from {g | ∃(s:Πa, set (π a)) (i : finset ι), (∀a∈i, is_open (s a)) ∧ g = pi ↑i s} :=
791
+ le_antisymm
792
+ (supr_le $ assume a s ⟨t, ht, s_eq⟩, generate_open.basic _ $
793
+ ⟨function.update (λa, univ) a t, {a}, by simpa using ht, by ext f; simp [s_eq, pi]⟩)
794
+ (generate_from_le $ assume g ⟨s, i, hi, eq⟩, eq.symm ▸ is_open_set_pi (finset.finite_to_set _) hi)
795
+
796
+ lemma pi_generate_from_eq {g : Πa, set (set (π a))} :
797
+ @Pi.topological_space ι π (λa, generate_from (g a)) =
798
+ generate_from {t | ∃(s:Πa, set (π a)) (i : finset ι), (∀a∈i, s a ∈ g a) ∧ t = pi ↑i s} :=
799
+ let G := {t | ∃(s:Πa, set (π a)) (i : finset ι), (∀a∈i, s a ∈ g a) ∧ t = pi ↑i s} in
800
+ begin
801
+ rw [pi_eq_generate_from],
802
+ refine le_antisymm (generate_from_le _) (generate_from_mono _),
803
+ { rintros s ⟨t, i, hi, rfl⟩,
804
+ rw [pi_def],
805
+ apply is_open_bInter (finset.finite_to_set _),
806
+ assume a ha, show ((generate_from G).coinduced (λf:Πa, π a, f a)).is_open (t a),
807
+ refine generate_from_le _ _ (hi a ha),
808
+ exact assume s hs, generate_open.basic _ ⟨function.update (λa, univ) a s, {a}, by simp [hs]⟩ },
809
+ exact assume s ⟨t, i, ht, eq⟩, ⟨t, i, assume a ha, generate_open.basic _ (ht a ha), eq⟩
810
+ end
811
+
812
+ lemma pi_generate_from_eq_fintype {g : Πa, set (set (π a))} [fintype ι] (hg : ∀a, ⋃₀ g a = univ) :
813
+ @Pi.topological_space ι π (λa, generate_from (g a)) =
814
+ generate_from {t | ∃(s:Πa, set (π a)), (∀a, s a ∈ g a) ∧ t = pi univ s} :=
815
+ let G := {t | ∃(s:Πa, set (π a)), (∀a, s a ∈ g a) ∧ t = pi univ s} in
816
+ begin
817
+ rw [pi_generate_from_eq],
818
+ refine le_antisymm (generate_from_le _) (generate_from_mono _),
819
+ { rintros s ⟨t, i, ht, rfl⟩,
820
+ apply is_open_iff_forall_mem_open.2 _,
821
+ assume f hf,
822
+ have : ∀a, ∃s, s ∈ g a ∧ f a ∈ s,
823
+ { assume a, have : f a ∈ ⋃₀ g a, { rw [hg], apply mem_univ }, simpa },
824
+ rcases classical.axiom_of_choice this with ⟨c, hc⟩,
825
+ refine ⟨pi univ (λa, if a ∈ i then t a else (c : Πa, set (π a)) a), _, _, _⟩,
826
+ { simp [pi_if] },
827
+ { refine generate_open.basic _ ⟨_, assume a, _, rfl⟩,
828
+ by_cases a ∈ i; simp [*, pi] at * },
829
+ { have : f ∈ pi {a | a ∉ i} c, { simp [*, pi] at * },
830
+ simpa [pi_if, hf] } },
831
+ exact assume s ⟨t, ht, eq⟩, ⟨t, finset.univ, by simp [ht, eq]⟩
832
+ end
833
+
834
+ instance second_countable_topology_fintype
835
+ [fintype ι] [t : ∀a, topological_space (π a)] [sc : ∀a, second_countable_topology (π a)] :
836
+ second_countable_topology (∀a, π a) :=
837
+ have ∀i, ∃b : set (set (π i)), countable b ∧ ∅ ∉ b ∧ is_topological_basis b, from
838
+ assume a, @is_open_generated_countable_inter (π a) _ (sc a),
839
+ let ⟨g, hg⟩ := classical.axiom_of_choice this in
840
+ have t = (λa, generate_from (g a)), from funext $ assume a, (hg a).2 .2 .2 .2 ,
841
+ begin
842
+ constructor,
843
+ refine ⟨pi univ '' pi univ g, countable_image _ _, _⟩,
844
+ { suffices : countable {f : Πa, set (π a) | ∀a, f a ∈ g a}, { simpa [pi] },
845
+ exact countable_pi (assume i, (hg i).1 ), },
846
+ rw [this , pi_generate_from_eq_fintype],
847
+ { congr' 1 , ext f, simp [pi, eq_comm] },
848
+ exact assume a, (hg a).2 .2 .2 .1
849
+ end
850
+
783
851
end pi
784
852
785
853
-- TODO: use embeddings from above!
0 commit comments