Documentation

Mathlib.Topology.Constructions

Constructions of new topological spaces from old ones #

This file constructs pi types, subtypes and quotients of topological spaces and sets up their basic theory, such as criteria for maps into or out of these constructions to be continuous; descriptions of the open sets, neighborhood filters, and generators of these constructions; and their behavior with respect to embeddings and other specific classes of maps.

Implementation note #

The constructed topologies are defined using induced and coinduced topologies along with the complete lattice structure on topologies. Their universal properties (for example, a map X → Y × Z is continuous if and only if both projections X → Y, X → Z are) follow easily using order-theoretic descriptions of continuity. With more work we can also extract descriptions of the open sets, neighborhood filters and so on.

Tags #

product, subspace, quotient space

@[implicit_reducible]
instance instTopologicalSpaceQuot {X : Type u} {r : XXProp} [t : TopologicalSpace X] :
@[implicit_reducible]
instance instTopologicalSpaceQuotient {X : Type u} {s : Setoid X} [t : TopologicalSpace X] :
TopologicalSpace (Quotient s)
@[implicit_reducible]
instance instTopologicalSpaceSigma {ι : Type u_5} {X : ιType v} [t₂ : (i : ι) → TopologicalSpace (X i)] :
@[implicit_reducible]
instance Pi.topologicalSpace {ι : Type u_5} {Y : ιType v} [t₂ : (i : ι) → TopologicalSpace (Y i)] :
TopologicalSpace ((i : ι) → Y i)
@[implicit_reducible]
instance ULift.topologicalSpace {X : Type u} [t : TopologicalSpace X] :
TopologicalSpace (ULift.{v, u} X)

Additive, Multiplicative #

The topology on those type synonyms is inherited without change.

Order dual #

The topology on this type synonym is inherited without change.

theorem Quotient.preimage_mem_nhds {X : Type u} [TopologicalSpace X] [s : Setoid X] {V : Set (Quotient s)} {x : X} (hs : V nhds (Quotient.mk' x)) :
Quotient.mk' ⁻¹' V nhds x
theorem Dense.quotient {X : Type u} [Setoid X] [TopologicalSpace X] {s : Set X} (H : Dense s) :
Dense (Quotient.mk' '' s)

The image of a dense set under Quotient.mk' is a dense set.

theorem DenseRange.quotient {X : Type u} {Y : Type v} [Setoid X] [TopologicalSpace X] {f : YX} (hf : DenseRange f) :
DenseRange (Quotient.mk' f)

The composition of Quotient.mk' and a function with dense range has dense range.

theorem continuous_map_of_le {α : Type u_5} [TopologicalSpace α] {s t : Setoid α} (h : s t) :
theorem continuous_map_sInf {α : Type u_5} [TopologicalSpace α] {S : Set (Setoid α)} {s : Setoid α} (h : s S) :
instance Sigma.discreteTopology {ι : Type u_5} {Y : ιType v} [(i : ι) → TopologicalSpace (Y i)] [h : ∀ (i : ι), DiscreteTopology (Y i)] :
@[simp]
theorem comap_nhdsWithin_range {α : Type u_5} {β : Type u_6} [TopologicalSpace β] (f : αβ) (y : β) :
theorem mem_nhds_subtype {X : Type u} [TopologicalSpace X] (s : Set X) (x : { x : X // x s }) (t : Set { x : X // x s }) :
t nhds x unhds x, Subtype.val ⁻¹' u t
theorem nhds_subtype {X : Type u} [TopologicalSpace X] (s : Set X) (x : { x : X // x s }) :
nhds x = Filter.comap Subtype.val (nhds x)
theorem nhds_subtype_eq_comap_nhdsWithin {X : Type u} [TopologicalSpace X] (s : Set X) (x : { x : X // x s }) :
nhds x = Filter.comap Subtype.val (nhdsWithin (↑x) s)
theorem nhdsWithin_subtype_eq_bot_iff {X : Type u} [TopologicalSpace X] {s t : Set X} {x : s} :
nhdsWithin x (Subtype.val ⁻¹' t) = nhdsWithin (↑x) tFilter.principal s =
theorem nhds_ne_subtype_eq_bot_iff {X : Type u} [TopologicalSpace X] {S : Set X} {x : S} :
nhdsWithin x {x} = nhdsWithin x {x}Filter.principal S =
theorem nhds_ne_subtype_neBot_iff {X : Type u} [TopologicalSpace X] {S : Set X} {x : S} :
(nhdsWithin x {x}).NeBot (nhdsWithin x {x}Filter.principal S).NeBot
structure IsDiscrete {X : Type u_5} [TopologicalSpace X] (s : Set X) :

A subset s is discrete if the corresponding subtype (with the subspace topology) is a discrete space.

Instances For
    def CofiniteTopology (X : Type u_5) :
    Type u_5

    A type synonym equipped with the topology whose open sets are the empty set and the sets with finite complements.

    Instances For

      The identity equivalence between X and CofiniteTopology X.

      Instances For
        @[implicit_reducible]
        instance CofiniteTopology.instInhabited {X : Type u} [Inhabited X] :
        Inhabited (CofiniteTopology X)
        theorem CofiniteTopology.mem_nhds_iff {X : Type u} {x : CofiniteTopology X} {s : Set (CofiniteTopology X)} :
        s nhds x x s s.Finite
        theorem MapClusterPt.curry_prodMap {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {α : Type u_5} {β : Type u_6} {f : αX} {g : βY} {la : Filter α} {lb : Filter β} {x : X} {y : Y} (hf : MapClusterPt x la f) (hg : MapClusterPt y lb g) :
        MapClusterPt (x, y) (la.curry lb) (Prod.map f g)
        theorem MapClusterPt.prodMap {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {α : Type u_5} {β : Type u_6} {f : αX} {g : βY} {la : Filter α} {lb : Filter β} {x : X} {y : Y} (hf : MapClusterPt x la f) (hg : MapClusterPt y lb g) :
        MapClusterPt (x, y) (la ×ˢ lb) (Prod.map f g)
        theorem continuous_bool_rng {X : Type u} [TopologicalSpace X] {f : XBool} (b : Bool) :
        Continuous f IsClopen (f ⁻¹' {b})
        theorem Topology.IsInducing.of_codRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {t : Set Y} (ht : ∀ (x : X), f x t) (h : IsInducing (Set.codRestrict f t ht)) :
        theorem continuous_subtype_val {X : Type u} [TopologicalSpace X] {p : XProp} :
        Continuous Subtype.val
        theorem Continuous.subtype_val {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : YSubtype p} (hf : Continuous f) :
        Continuous fun (x : Y) => (f x)
        theorem IsOpen.isOpenMap_subtype_val {X : Type u} [TopologicalSpace X] {s : Set X} (hs : IsOpen s) :
        IsOpenMap Subtype.val
        theorem IsOpenMap.restrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsOpenMap f) {s : Set X} (hs : IsOpen s) :
        theorem IsClosedMap.restrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsClosedMap f) {s : Set X} (hs : IsClosed s) :
        theorem Continuous.subtype_mk {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : YX} (h : Continuous f) (hp : ∀ (x : Y), p (f x)) :
        Continuous fun (x : Y) => f x,
        theorem IsOpenMap.subtype_mk {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : YX} (hf : IsOpenMap f) (hp : ∀ (x : Y), p (f x)) :
        IsOpenMap fun (x : Y) => f x,
        theorem IsClosedMap.subtype_mk {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : YX} (hf : IsClosedMap f) (hp : ∀ (x : Y), p (f x)) :
        IsClosedMap fun (x : Y) => f x,
        theorem Continuous.subtype_coind {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : YX} (hf : Continuous f) (hp : ∀ (x : Y), p (f x)) :
        theorem IsOpenMap.subtype_coind {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : YX} (hf : IsOpenMap f) (hp : ∀ (x : Y), p (f x)) :
        theorem IsClosedMap.subtype_coind {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : YX} (hf : IsClosedMap f) (hp : ∀ (x : Y), p (f x)) :
        theorem Continuous.subtype_map {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {p : XProp} {f : XY} (h : Continuous f) {q : YProp} (hpq : ∀ (x : X), p xq (f x)) :
        theorem IsOpenMap.subtype_map {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsOpenMap f) {s : Set X} {t : Set Y} (hs : IsOpen s) (hst : xs, f x t) :
        theorem IsClosedMap.subtype_map {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsClosedMap f) {s : Set X} {t : Set Y} (hs : IsClosed s) (hst : xs, f x t) :
        theorem IsOpen.isOpenMap_inclusion {X : Type u} [TopologicalSpace X] {s t : Set X} (hs : IsOpen s) (h : s t) :
        theorem continuousAt_subtype_val {X : Type u} [TopologicalSpace X] {p : XProp} {x : Subtype p} :
        ContinuousAt Subtype.val x
        def Homeomorph.ofEqSubtypes {X : Type u} [TopologicalSpace X] {p q : XProp} (hpq : p = q) :
        Subtype p ≃ₜ Subtype q

        The induced homeomorphism between two equal subtypes of a given topological space: the underlying equivalence is Equiv.subtypeEquivProp.

        Instances For
          @[simp]
          theorem Homeomorph.ofEqSubtypes_toEquiv {X : Type u} [TopologicalSpace X] {p q : XProp} (hpq : p = q) :
          theorem Subtype.dense_iff {X : Type u} [TopologicalSpace X] {s : Set X} {t : Set s} :
          Dense t s closure (val '' t)
          @[simp]
          theorem denseRange_inclusion_iff {X : Type u} [TopologicalSpace X] {s t : Set X} (hst : s t) :
          DenseRange (Set.inclusion hst) t closure s
          theorem map_nhds_subtype_val {X : Type u} [TopologicalSpace X] {s : Set X} (x : s) :
          Filter.map Subtype.val (nhds x) = nhdsWithin (↑x) s
          theorem map_nhds_subtype_coe_eq_nhds {X : Type u} [TopologicalSpace X] {p : XProp} {x : X} (hx : p x) (h : ∀ᶠ (x : X) in nhds x, p x) :
          Filter.map Subtype.val (nhds x, hx) = nhds x
          theorem nhds_subtype_eq_comap {X : Type u} [TopologicalSpace X] {p : XProp} {x : X} {h : p x} :
          nhds x, h = Filter.comap Subtype.val (nhds x)
          theorem tendsto_subtype_rng {X : Type u} [TopologicalSpace X] {Y : Type u_5} {p : XProp} {l : Filter Y} {f : YSubtype p} {x : Subtype p} :
          Filter.Tendsto f l (nhds x) Filter.Tendsto (fun (x : Y) => (f x)) l (nhds x)
          theorem closure_subtype {X : Type u} [TopologicalSpace X] {p : XProp} {x : { a : X // p a }} {s : Set { a : X // p a }} :
          x closure s x closure (Subtype.val '' s)
          @[simp]
          theorem continuousAt_codRestrict_iff {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {t : Set Y} (h1 : ∀ (x : X), f x t) {x : X} :
          theorem ContinuousAt.codRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {t : Set Y} (h1 : ∀ (x : X), f x t) {x : X} :

          Alias of the reverse direction of continuousAt_codRestrict_iff.

          theorem ContinuousAt.restrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {s : Set X} {t : Set Y} (h1 : Set.MapsTo f s t) {x : s} (h2 : ContinuousAt f x) :
          theorem ContinuousAt.restrictPreimage {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {s : Set Y} {x : ↑(f ⁻¹' s)} (h : ContinuousAt f x) :
          theorem Continuous.codRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {s : Set Y} (hf : Continuous f) (hs : ∀ (a : X), f a s) :
          theorem IsOpenMap.codRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsOpenMap f) {s : Set Y} (hs : ∀ (a : X), f a s) :
          theorem IsClosedMap.codRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsClosedMap f) {s : Set Y} (hs : ∀ (a : X), f a s) :
          theorem Continuous.restrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} {s : Set X} {t : Set Y} (h1 : Set.MapsTo f s t) (h2 : Continuous f) :
          theorem IsOpenMap.mapsToRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsOpenMap f) {s : Set X} {t : Set Y} (hs : IsOpen s) (ht : Set.MapsTo f s t) :
          theorem IsClosedMap.mapsToRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsClosedMap f) {s : Set X} {t : Set Y} (hs : IsClosed s) (ht : Set.MapsTo f s t) :
          theorem Topology.IsEmbedding.restrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsEmbedding f) {s : Set X} {t : Set Y} (H : Set.MapsTo f s t) :
          theorem Topology.IsOpenEmbedding.restrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {f : XY} (hf : IsOpenEmbedding f) {s : Set X} {t : Set Y} (H : Set.MapsTo f s t) (hs : IsOpen s) :
          theorem Topology.IsInducing.codRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {e : XY} (he : IsInducing e) {s : Set Y} (hs : ∀ (x : X), e x s) :
          theorem Topology.IsEmbedding.codRestrict {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {e : XY} (he : IsEmbedding e) (s : Set Y) (hs : ∀ (x : X), e x s) :
          theorem Topology.IsOpenEmbedding.inclusion {X : Type u} [TopologicalSpace X] {s t : Set X} (hst : s t) (hs : IsOpen (Subtype.val ⁻¹' s)) :
          theorem Topology.IsClosedEmbedding.inclusion {X : Type u} [TopologicalSpace X] {s t : Set X} (hst : s t) (hs : IsClosed (Subtype.val ⁻¹' s)) :
          theorem DiscreteTopology.of_subset {X : Type u_5} [TopologicalSpace X] {s t : Set X} :
          DiscreteTopology s∀ (ts : t s), DiscreteTopology t

          Let s, t ⊆ X be two subsets of a topological space X. If t ⊆ s and the topology induced by X on s is discrete, then also the topology induces on t is discrete.

          (Compare IsDiscrete.mono which is the same thing stated without using subtypes.)

          theorem IsDiscrete.mono {X : Type u} [TopologicalSpace X] {s t : Set X} (hs : IsDiscrete s) (hst : t s) :

          Let s, t ⊆ X be two subsets of a topological space X. If t ⊆ s and s is discrete, then t is discrete.

          (Compare DiscreteTopology.of_subset which is the same thing stated in terms of subtypes.)

          theorem DiscreteTopology.preimage_of_continuous_injective {X : Type u_5} {Y : Type u_6} [TopologicalSpace X] [TopologicalSpace Y] (s : Set Y) [DiscreteTopology s] {f : XY} (hc : Continuous f) (hinj : Function.Injective f) :

          Let s be a discrete subset of a topological space. Then the preimage of s by a continuous injective map is also discrete.

          If f : X → Y is a quotient map, then its restriction to the preimage of an open set is a quotient map too.

          theorem isClosed_preimage_val {X : Type u} [TopologicalSpace X] {s t : Set X} :
          IsClosed (Subtype.val ⁻¹' t) s closure (s t) t
          theorem frontier_inter_open_inter {X : Type u} [TopologicalSpace X] {s t : Set X} (ht : IsOpen t) :
          frontier (s t) t = frontier s t
          theorem IsOpen.preimage_val {X : Type u} [TopologicalSpace X] {s t : Set X} (ht : IsOpen t) :
          IsOpen (Subtype.val ⁻¹' t)
          theorem exists_open_dense_of_open_dense_subtype {X : Type u} [TopologicalSpace X] {s : Set X} (hs : Dense s) {u : Set s} (huo : IsOpen u) (hud : Dense u) :
          ∃ (v : Set X), IsOpen v Dense v Subtype.val ⁻¹' v = u

          If s is dense in X and u is open and dense in s, then u = v ∩ s for some v that is open and dense in X.

          theorem IsClosed.preimage_val {X : Type u} [TopologicalSpace X] {s t : Set X} (ht : IsClosed t) :
          IsClosed (Subtype.val ⁻¹' t)
          @[simp]
          theorem IsOpen.inter_preimage_val_iff {X : Type u} [TopologicalSpace X] {s t : Set X} (hs : IsOpen s) :
          IsOpen (Subtype.val ⁻¹' t) IsOpen (s t)
          @[simp]
          theorem IsClosed.inter_preimage_val_iff {X : Type u} [TopologicalSpace X] {s t : Set X} (hs : IsClosed s) :
          IsClosed (Subtype.val ⁻¹' t) IsClosed (s t)
          theorem continuous_quot_mk {X : Type u} [TopologicalSpace X] {r : XXProp} :
          Continuous (Quot.mk r)
          theorem continuous_quot_lift {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {r : XXProp} {f : XY} (hr : ∀ (a b : X), r a bf a = f b) (h : Continuous f) :
          Continuous (Quot.lift f hr)
          theorem continuous_quotient_mk' {X : Type u} [TopologicalSpace X] {s : Setoid X} :
          Continuous Quotient.mk'
          theorem Continuous.quotient_lift {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {s : Setoid X} {f : XY} (h : Continuous f) (hs : ∀ (a b : X), a bf a = f b) :
          Continuous (Quotient.lift f hs)
          theorem Continuous.quotient_liftOn' {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {s : Setoid X} {f : XY} (h : Continuous f) (hs : ∀ (a b : X), s a bf a = f b) :
          Continuous fun (x : Quotient s) => x.liftOn' f hs
          theorem Continuous.quotient_map' {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {s : Setoid X} {t : Setoid Y} {f : XY} (hf : Continuous f) (H : Relator.LiftFun (⇑s) (⇑t) f f) :
          theorem continuous_pi_iff {X : Type u} {ι : Type u_5} {A : ιType u_6} [TopologicalSpace X] [T : (i : ι) → TopologicalSpace (A i)] {f : X(i : ι) → A i} :
          Continuous f ∀ (i : ι), Continuous fun (a : X) => f a i
          theorem continuous_pi {X : Type u} {ι : Type u_5} {A : ιType u_6} [TopologicalSpace X] [T : (i : ι) → TopologicalSpace (A i)] {f : X(i : ι) → A i} (h : ∀ (i : ι), Continuous fun (a : X) => f a i) :
          theorem continuous_apply {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] (i : ι) :
          Continuous fun (p : (i : ι) → A i) => p i
          theorem continuous_apply_apply {ι : Type u_5} {κ : Type u_8} {ρ : κιType u_9} [(j : κ) → (i : ι) → TopologicalSpace (ρ j i)] (j : κ) (i : ι) :
          Continuous fun (p : (j : κ) → (i : ι) → ρ j i) => p j i
          theorem continuousAt_apply {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] (i : ι) (x : (i : ι) → A i) :
          ContinuousAt (fun (p : (i : ι) → A i) => p i) x
          theorem Filter.Tendsto.apply_nhds {Y : Type v} {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {l : Filter Y} {f : Y(i : ι) → A i} {x : (i : ι) → A i} (h : Tendsto f l (nhds x)) (i : ι) :
          Tendsto (fun (a : Y) => f a i) l (nhds (x i))
          theorem Continuous.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] {f : (i : ι) → A iB i} (hf : ∀ (i : ι), Continuous (f i)) :
          theorem nhds_pi {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {a : (i : ι) → A i} :
          nhds a = Filter.pi fun (i : ι) => nhds (a i)
          theorem IsOpenMap.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] {f : (i : ι) → A iB i} (hfo : ∀ (i : ι), IsOpenMap (f i)) (hsurj : ∀ᶠ (i : ι) in Filter.cofinite, Function.Surjective (f i)) :
          theorem IsOpenQuotientMap.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] {f : (i : ι) → A iB i} (hf : ∀ (i : ι), IsOpenQuotientMap (f i)) :
          theorem tendsto_pi_nhds {Y : Type v} {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {f : Y(i : ι) → A i} {g : (i : ι) → A i} {u : Filter Y} :
          Filter.Tendsto f u (nhds g) ∀ (x : ι), Filter.Tendsto (fun (i : Y) => f i x) u (nhds (g x))
          theorem continuousAt_pi {X : Type u} {ι : Type u_5} {A : ιType u_6} [TopologicalSpace X] [T : (i : ι) → TopologicalSpace (A i)] {f : X(i : ι) → A i} {x : X} :
          ContinuousAt f x ∀ (i : ι), ContinuousAt (fun (y : X) => f y i) x
          theorem continuousAt_pi' {X : Type u} {ι : Type u_5} {A : ιType u_6} [TopologicalSpace X] [T : (i : ι) → TopologicalSpace (A i)] {f : X(i : ι) → A i} {x : X} (hf : ∀ (i : ι), ContinuousAt (fun (y : X) => f y i) x) :
          theorem ContinuousAt.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] {f : (i : ι) → A iB i} {x : (i : ι) → A i} (hf : ∀ (i : ι), ContinuousAt (f i) (x i)) :
          theorem Topology.IsInducing.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] {f : (i : ι) → A iB i} (hf : ∀ (i : ι), IsInducing (f i)) :
          theorem Topology.IsEmbedding.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] {f : (i : ι) → A iB i} (hf : ∀ (i : ι), IsEmbedding (f i)) :
          theorem Pi.continuous_precomp' {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {ι' : Type u_9} (φ : ι'ι) :
          Continuous fun (f : (i : ι) → A i) (j : ι') => f (φ j)
          theorem Pi.continuous_precomp {X : Type u} {ι : Type u_5} [TopologicalSpace X] {ι' : Type u_9} (φ : ι'ι) :
          Continuous fun (x : ιX) => x φ
          theorem Pi.continuous_postcomp' {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {X : ιType u_9} [(i : ι) → TopologicalSpace (X i)] {g : (i : ι) → A iX i} (hg : ∀ (i : ι), Continuous (g i)) :
          Continuous fun (f : (i : ι) → A i) (i : ι) => g i (f i)
          theorem Pi.continuous_postcomp {X : Type u} {Y : Type v} {ι : Type u_5} [TopologicalSpace X] [TopologicalSpace Y] {g : XY} (hg : Continuous g) :
          Continuous fun (x : ιX) => g x
          theorem Pi.induced_precomp' {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {ι' : Type u_9} (φ : ι'ι) :
          TopologicalSpace.induced (fun (f : (i : ι) → A i) (j : ι') => f (φ j)) topologicalSpace = ⨅ (i' : ι'), TopologicalSpace.induced (Function.eval (φ i')) (T (φ i'))
          theorem Pi.induced_precomp {Y : Type v} {ι : Type u_5} [TopologicalSpace Y] {ι' : Type u_9} (φ : ι'ι) :
          TopologicalSpace.induced (fun (x : ιY) => x φ) topologicalSpace = ⨅ (i' : ι'), TopologicalSpace.induced (Function.eval (φ i')) inst✝
          def Homeomorph.piCurry {X : Type u_9} {Y : Type u_10} {Z : Type u_11} [TopologicalSpace Z] :
          (X × YZ) ≃ₜ (XYZ)

          Homeomorphism between X → Y → Z and X × Y → Z with product topologies.

          Instances For
            @[simp]
            theorem Homeomorph.piCurry_symm_apply {X : Type u_9} {Y : Type u_10} {Z : Type u_11} [TopologicalSpace Z] (a✝ : XYZ) (a✝¹ : X × Y) :
            piCurry.symm a✝ a✝¹ = Function.uncurry a✝ a✝¹
            @[simp]
            theorem Homeomorph.piCurry_apply {X : Type u_9} {Y : Type u_10} {Z : Type u_11} [TopologicalSpace Z] (a✝ : X × YZ) (a✝¹ : X) (a✝² : Y) :
            piCurry a✝ a✝¹ a✝² = Function.curry a✝ a✝¹ a✝²
            theorem Pi.continuous_restrict {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] (S : Set ι) :
            theorem Pi.continuous_restrict₂ {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {s t : Set ι} (hst : s t) :
            theorem Finset.continuous_restrict {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] (s : Finset ι) :
            theorem Finset.continuous_restrict₂ {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {s t : Finset ι} (hst : s t) :
            theorem Pi.continuous_restrict_apply {X : Type u} {Z : Type u_1} [TopologicalSpace X] [TopologicalSpace Z] (s : Set X) {f : XZ} (hf : Continuous f) :
            theorem Pi.continuous_restrict₂_apply {X : Type u} {Z : Type u_1} [TopologicalSpace X] [TopologicalSpace Z] {s t : Set X} (hst : s t) {f : tZ} (hf : Continuous f) :
            theorem Finset.continuous_restrict₂_apply {X : Type u} {Z : Type u_1} [TopologicalSpace X] [TopologicalSpace Z] {s t : Finset X} (hst : s t) {f : tZ} (hf : Continuous f) :
            theorem Pi.induced_restrict {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] (S : Set ι) :
            theorem Filter.Tendsto.update {Y : Type v} {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] [DecidableEq ι] {l : Filter Y} {f : Y(i : ι) → A i} {x : (i : ι) → A i} (hf : Tendsto f l (nhds x)) (i : ι) {g : YA i} {xi : A i} (hg : Tendsto g l (nhds xi)) :
            Tendsto (fun (a : Y) => Function.update (f a) i (g a)) l (nhds (Function.update x i xi))
            theorem ContinuousAt.update {X : Type u} {ι : Type u_5} {A : ιType u_6} [TopologicalSpace X] [T : (i : ι) → TopologicalSpace (A i)] {f : X(i : ι) → A i} [DecidableEq ι] {x : X} (hf : ContinuousAt f x) (i : ι) {g : XA i} (hg : ContinuousAt g x) :
            ContinuousAt (fun (a : X) => Function.update (f a) i (g a)) x
            theorem Continuous.update {X : Type u} {ι : Type u_5} {A : ιType u_6} [TopologicalSpace X] [T : (i : ι) → TopologicalSpace (A i)] {f : X(i : ι) → A i} [DecidableEq ι] (hf : Continuous f) (i : ι) {g : XA i} (hg : Continuous g) :
            Continuous fun (a : X) => Function.update (f a) i (g a)
            theorem continuous_update {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] [DecidableEq ι] (i : ι) :
            Continuous fun (f : ((j : ι) → A j) × A i) => Function.update f.1 i f.2

            Function.update f i x is continuous in (f, x).

            theorem continuous_mulSingle {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → One (A i)] [DecidableEq ι] (i : ι) :
            Continuous fun (x : A i) => Pi.mulSingle i x

            Pi.mulSingle i x is continuous in x.

            theorem continuous_single {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → Zero (A i)] [DecidableEq ι] (i : ι) :
            Continuous fun (x : A i) => Pi.single i x

            Pi.single i x is continuous in x.

            theorem Filter.Tendsto.finCons {Y : Type v} {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : YA 0} {g : Y(j : Fin n) → A j.succ} {l : Filter Y} {x : A 0} {y : (j : Fin n) → A j.succ} (hf : Tendsto f l (nhds x)) (hg : Tendsto g l (nhds y)) :
            Tendsto (fun (a : Y) => Fin.cons (f a) (g a)) l (nhds (Fin.cons x y))
            theorem ContinuousAt.finCons {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : XA 0} {g : X(j : Fin n) → A j.succ} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
            ContinuousAt (fun (a : X) => Fin.cons (f a) (g a)) x
            theorem Continuous.finCons {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : XA 0} {g : X(j : Fin n) → A j.succ} (hf : Continuous f) (hg : Continuous g) :
            Continuous fun (a : X) => Fin.cons (f a) (g a)
            theorem Filter.Tendsto.matrixVecCons {Y : Type v} {Z : Type u_1} [TopologicalSpace Z] {n : } {f : YZ} {g : YFin nZ} {l : Filter Y} {x : Z} {y : Fin nZ} (hf : Tendsto f l (nhds x)) (hg : Tendsto g l (nhds y)) :
            Tendsto (fun (a : Y) => Matrix.vecCons (f a) (g a)) l (nhds (Matrix.vecCons x y))
            theorem ContinuousAt.matrixVecCons {X : Type u} {Z : Type u_1} [TopologicalSpace X] [TopologicalSpace Z] {n : } {f : XZ} {g : XFin nZ} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
            ContinuousAt (fun (a : X) => Matrix.vecCons (f a) (g a)) x
            theorem Continuous.matrixVecCons {X : Type u} {Z : Type u_1} [TopologicalSpace X] [TopologicalSpace Z] {n : } {f : XZ} {g : XFin nZ} (hf : Continuous f) (hg : Continuous g) :
            Continuous fun (a : X) => Matrix.vecCons (f a) (g a)
            theorem Filter.Tendsto.finSnoc {Y : Type v} {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : Y(j : Fin n) → A j.castSucc} {g : YA (Fin.last n)} {l : Filter Y} {x : (j : Fin n) → A j.castSucc} {y : A (Fin.last n)} (hf : Tendsto f l (nhds x)) (hg : Tendsto g l (nhds y)) :
            Tendsto (fun (a : Y) => Fin.snoc (f a) (g a)) l (nhds (Fin.snoc x y))
            theorem ContinuousAt.finSnoc {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : X(j : Fin n) → A j.castSucc} {g : XA (Fin.last n)} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
            ContinuousAt (fun (a : X) => Fin.snoc (f a) (g a)) x
            theorem Continuous.finSnoc {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : X(j : Fin n) → A j.castSucc} {g : XA (Fin.last n)} (hf : Continuous f) (hg : Continuous g) :
            Continuous fun (a : X) => Fin.snoc (f a) (g a)
            theorem Filter.Tendsto.finInsertNth {Y : Type v} {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] (i : Fin (n + 1)) {f : YA i} {g : Y(j : Fin n) → A (i.succAbove j)} {l : Filter Y} {x : A i} {y : (j : Fin n) → A (i.succAbove j)} (hf : Tendsto f l (nhds x)) (hg : Tendsto g l (nhds y)) :
            Tendsto (fun (a : Y) => i.insertNth (f a) (g a)) l (nhds (i.insertNth x y))
            theorem ContinuousAt.finInsertNth {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] (i : Fin (n + 1)) {f : XA i} {g : X(j : Fin n) → A (i.succAbove j)} {x : X} (hf : ContinuousAt f x) (hg : ContinuousAt g x) :
            ContinuousAt (fun (a : X) => i.insertNth (f a) (g a)) x
            theorem Continuous.finInsertNth {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] (i : Fin (n + 1)) {f : XA i} {g : X(j : Fin n) → A (i.succAbove j)} (hf : Continuous f) (hg : Continuous g) :
            Continuous fun (a : X) => i.insertNth (f a) (g a)
            theorem Filter.Tendsto.finInit {Y : Type v} {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : Y(j : Fin (n + 1)) → A j} {l : Filter Y} {x : (j : Fin (n + 1)) → A j} (hg : Tendsto f l (nhds x)) :
            Tendsto (fun (a : Y) => Fin.init (f a)) l (nhds (Fin.init x))
            theorem ContinuousAt.finInit {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : X(j : Fin (n + 1)) → A j} {x : X} (hf : ContinuousAt f x) :
            ContinuousAt (fun (a : X) => Fin.init (f a)) x
            theorem Continuous.finInit {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : X(j : Fin (n + 1)) → A j} (hf : Continuous f) :
            Continuous fun (a : X) => Fin.init (f a)
            theorem Filter.Tendsto.finTail {Y : Type v} {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : Y(j : Fin (n + 1)) → A j} {l : Filter Y} {x : (j : Fin (n + 1)) → A j} (hg : Tendsto f l (nhds x)) :
            Tendsto (fun (a : Y) => Fin.tail (f a)) l (nhds (Fin.tail x))
            theorem ContinuousAt.finTail {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : X(j : Fin (n + 1)) → A j} {x : X} (hf : ContinuousAt f x) :
            ContinuousAt (fun (a : X) => Fin.tail (f a)) x
            theorem Continuous.finTail {X : Type u} [TopologicalSpace X] {n : } {A : Fin (n + 1)Type u_9} [(i : Fin (n + 1)) → TopologicalSpace (A i)] {f : X(j : Fin (n + 1)) → A j} (hf : Continuous f) :
            Continuous fun (a : X) => Fin.tail (f a)
            theorem isOpen_set_pi {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {i : Set ι} {s : (a : ι) → Set (A a)} (hi : i.Finite) (hs : ai, IsOpen (s a)) :
            IsOpen (i.pi s)
            theorem isOpen_pi_iff {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {s : Set ((a : ι) → A a)} :
            IsOpen s fs, ∃ (I : Finset ι) (u : (a : ι) → Set (A a)), (∀ aI, IsOpen (u a) f a u a) (↑I).pi u s
            theorem isOpen_pi_iff' {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] [Finite ι] {s : Set ((a : ι) → A a)} :
            IsOpen s fs, ∃ (u : (a : ι) → Set (A a)), (∀ (a : ι), IsOpen (u a) f a u a) Set.univ.pi u s
            theorem isClosed_set_pi {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {i : Set ι} {s : (a : ι) → Set (A a)} (hs : ai, IsClosed (s a)) :
            IsClosed (i.pi s)
            theorem Topology.IsClosedEmbedding.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] {f : (i : ι) → A iB i} (hf : ∀ (i : ι), IsClosedEmbedding (f i)) :
            theorem Topology.IsOpenEmbedding.piMap {ι : Type u_5} {A : ιType u_6} {B : ιType u_7} [T : (i : ι) → TopologicalSpace (A i)] [(i : ι) → TopologicalSpace (B i)] [Finite ι] {f : (i : ι) → A iB i} (hf : ∀ (i : ι), IsOpenEmbedding (f i)) :
            theorem mem_nhds_of_pi_mem_nhds {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {I : Set ι} {s : (i : ι) → Set (A i)} (a : (i : ι) → A i) (hs : I.pi s nhds a) {i : ι} (hi : i I) :
            s i nhds (a i)
            theorem set_pi_mem_nhds {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {i : Set ι} {s : (a : ι) → Set (A a)} {x : (a : ι) → A a} (hi : i.Finite) (hs : ai, s a nhds (x a)) :
            i.pi s nhds x
            theorem set_pi_mem_nhds_iff {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {I : Set ι} (hI : I.Finite) {s : (i : ι) → Set (A i)} (a : (i : ι) → A i) :
            I.pi s nhds a iI, s i nhds (a i)
            theorem interior_pi_set {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {I : Set ι} (hI : I.Finite) {s : (i : ι) → Set (A i)} :
            interior (I.pi s) = I.pi fun (i : ι) => interior (s i)
            theorem exists_finset_piecewise_mem_of_mem_nhds {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] [DecidableEq ι] {s : Set ((a : ι) → A a)} {x : (a : ι) → A a} (hs : s nhds x) (y : (a : ι) → A a) :
            ∃ (I : Finset ι), I.piecewise x y s
            theorem pi_generateFrom_eq {ι : Type u_5} {A : ιType u_9} {g : (a : ι) → Set (Set (A a))} :
            Pi.topologicalSpace = TopologicalSpace.generateFrom {t : Set ((i : ι) → A i) | ∃ (s : (a : ι) → Set (A a)) (i : Finset ι), (∀ ai, s a g a) t = (↑i).pi s}
            theorem pi_eq_generateFrom {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] :
            Pi.topologicalSpace = TopologicalSpace.generateFrom {g : Set ((i : ι) → A i) | ∃ (s : (a : ι) → Set (A a)) (i : Finset ι), (∀ ai, IsOpen (s a)) g = (↑i).pi s}
            theorem pi_generateFrom_eq_finite {ι : Type u_5} {X : ιType u_9} {g : (a : ι) → Set (Set (X a))} [Finite ι] (hg : ∀ (a : ι), ⋃₀ g a = Set.univ) :
            Pi.topologicalSpace = TopologicalSpace.generateFrom {t : Set ((i : ι) → X i) | ∃ (s : (a : ι) → Set (X a)), (∀ (a : ι), s a g a) t = Set.univ.pi s}
            theorem induced_to_pi {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {X : Type u_9} (f : X(i : ι) → A i) :
            TopologicalSpace.induced f Pi.topologicalSpace = ⨅ (i : ι), TopologicalSpace.induced (fun (x : X) => f x i) inferInstance
            theorem inducing_iInf_to_pi {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] {X : Type u_9} (f : (i : ι) → XA i) :
            Topology.IsInducing fun (x : X) (i : ι) => f i x

            Suppose A i is a family of topological spaces indexed by i : ι, and X is a type endowed with a family of maps f i : X → A i for every i : ι, hence inducing a map g : X → Π i, A i. This lemma shows that infimum of the topologies on X induced by the f i as i : ι varies is simply the topology on X induced by g : X → Π i, A i where Π i, A i is endowed with the usual product topology.

            instance Pi.discreteTopology {ι : Type u_5} {A : ιType u_6} [T : (i : ι) → TopologicalSpace (A i)] [Finite ι] [∀ (i : ι), DiscreteTopology (A i)] :
            DiscreteTopology ((i : ι) → A i)

            A finite product of discrete spaces is discrete.

            theorem Function.Surjective.isEmbedding_comp {X : Type u} [TopologicalSpace X] {n : Type u_9} {m : Type u_10} (f : mn) (hf : Surjective f) :
            Topology.IsEmbedding fun (x : nX) => x f
            theorem continuous_sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            Continuous (Sigma.mk i)
            theorem isOpen_sigma_iff {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {s : Set (Sigma σ)} :
            IsOpen s ∀ (i : ι), IsOpen (Sigma.mk i ⁻¹' s)
            theorem isClosed_sigma_iff {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {s : Set (Sigma σ)} :
            IsClosed s ∀ (i : ι), IsClosed (Sigma.mk i ⁻¹' s)
            theorem isOpenMap_sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            IsOpenMap (Sigma.mk i)
            theorem isOpen_range_sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            IsOpen (Set.range (Sigma.mk i))
            theorem isClosedMap_sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            IsClosedMap (Sigma.mk i)
            theorem isClosed_range_sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            IsClosed (Set.range (Sigma.mk i))
            theorem Topology.IsOpenEmbedding.sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            IsOpenEmbedding (Sigma.mk i)
            theorem Topology.IsClosedEmbedding.sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            IsClosedEmbedding (Sigma.mk i)
            theorem Topology.IsEmbedding.sigmaMk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] {i : ι} :
            IsEmbedding (Sigma.mk i)
            theorem Sigma.nhds_mk {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] (i : ι) (x : σ i) :
            nhds i, x = Filter.map (mk i) (nhds x)
            theorem Sigma.nhds_eq {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] (x : Sigma σ) :
            nhds x = Filter.map (mk x.fst) (nhds x.snd)
            theorem comap_sigmaMk_nhds {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] (i : ι) (x : σ i) :
            Filter.comap (Sigma.mk i) (nhds i, x) = nhds x
            theorem isOpen_sigma_fst_preimage {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] (s : Set ι) :
            IsOpen (Sigma.fst ⁻¹' s)
            @[simp]
            theorem continuous_sigma_iff {X : Type u} {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] [TopologicalSpace X] {f : Sigma σX} :
            Continuous f ∀ (i : ι), Continuous fun (a : σ i) => f i, a

            A map out of a sum type is continuous iff its restriction to each summand is.

            theorem continuous_sigma {X : Type u} {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] [TopologicalSpace X] {f : Sigma σX} (hf : ∀ (i : ι), Continuous fun (a : σ i) => f i, a) :

            A map out of a sum type is continuous if its restriction to each summand is.

            theorem inducing_sigma {X : Type u} {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] [TopologicalSpace X] {f : Sigma σX} :
            Topology.IsInducing f (∀ (i : ι), Topology.IsInducing (f Sigma.mk i)) ∀ (i : ι), ∃ (U : Set X), IsOpen U ∀ (x : Sigma σ), f x U x.fst = i

            A map defined on a sigma type (a.k.a. the disjoint union of an indexed family of topological spaces) is inducing iff its restriction to each component is inducing and each the image of each component under f can be separated from the images of all other components by an open set.

            @[simp]
            theorem continuous_sigma_map {ι : Type u_5} {κ : Type u_6} {σ : ιType u_7} {τ : κType u_8} [(i : ι) → TopologicalSpace (σ i)] [(k : κ) → TopologicalSpace (τ k)] {f₁ : ικ} {f₂ : (i : ι) → σ iτ (f₁ i)} :
            Continuous (Sigma.map f₁ f₂) ∀ (i : ι), Continuous (f₂ i)
            theorem Continuous.sigma_map {ι : Type u_5} {κ : Type u_6} {σ : ιType u_7} {τ : κType u_8} [(i : ι) → TopologicalSpace (σ i)] [(k : κ) → TopologicalSpace (τ k)] {f₁ : ικ} {f₂ : (i : ι) → σ iτ (f₁ i)} (hf : ∀ (i : ι), Continuous (f₂ i)) :
            Continuous (Sigma.map f₁ f₂)
            theorem isOpenMap_sigma {X : Type u} {ι : Type u_5} {σ : ιType u_7} [(i : ι) → TopologicalSpace (σ i)] [TopologicalSpace X] {f : Sigma σX} :
            IsOpenMap f ∀ (i : ι), IsOpenMap fun (a : σ i) => f i, a
            theorem isOpenMap_sigma_map {ι : Type u_5} {κ : Type u_6} {σ : ιType u_7} {τ : κType u_8} [(i : ι) → TopologicalSpace (σ i)] [(k : κ) → TopologicalSpace (τ k)] {f₁ : ικ} {f₂ : (i : ι) → σ iτ (f₁ i)} :
            IsOpenMap (Sigma.map f₁ f₂) ∀ (i : ι), IsOpenMap (f₂ i)
            theorem Topology.isInducing_sigmaMap {ι : Type u_5} {κ : Type u_6} {σ : ιType u_7} {τ : κType u_8} [(i : ι) → TopologicalSpace (σ i)] [(k : κ) → TopologicalSpace (τ k)] {f₁ : ικ} {f₂ : (i : ι) → σ iτ (f₁ i)} (h₁ : Function.Injective f₁) :
            IsInducing (Sigma.map f₁ f₂) ∀ (i : ι), IsInducing (f₂ i)
            theorem Topology.isEmbedding_sigmaMap {ι : Type u_5} {κ : Type u_6} {σ : ιType u_7} {τ : κType u_8} [(i : ι) → TopologicalSpace (σ i)] [(k : κ) → TopologicalSpace (τ k)] {f₁ : ικ} {f₂ : (i : ι) → σ iτ (f₁ i)} (h : Function.Injective f₁) :
            IsEmbedding (Sigma.map f₁ f₂) ∀ (i : ι), IsEmbedding (f₂ i)
            theorem Topology.isOpenEmbedding_sigmaMap {ι : Type u_5} {κ : Type u_6} {σ : ιType u_7} {τ : κType u_8} [(i : ι) → TopologicalSpace (σ i)] [(k : κ) → TopologicalSpace (τ k)] {f₁ : ικ} {f₂ : (i : ι) → σ iτ (f₁ i)} (h : Function.Injective f₁) :
            IsOpenEmbedding (Sigma.map f₁ f₂) ∀ (i : ι), IsOpenEmbedding (f₂ i)
            theorem ULift.isOpen_iff {X : Type u} [TopologicalSpace X] {s : Set (ULift.{v, u} X)} :
            IsOpen s IsOpen (up ⁻¹' s)
            theorem ULift.isClosed_iff {X : Type u} [TopologicalSpace X] {s : Set (ULift.{v, u} X)} :
            IsClosed s IsClosed (up ⁻¹' s)
            def ContinuousMap.uliftEquiv (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] :
            C(ULift.{v, u} X, ULift.{u, v} Y) C(X, Y)

            Continuous maps between ULift X and ULift Y are equivalent to continuous maps between X and Y.

            Instances For
              @[simp]
              theorem ContinuousMap.uliftEquiv_apply_apply (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] (f : C(ULift.{v, u} X, ULift.{u, v} Y)) (a✝ : X) :
              ((uliftEquiv X Y) f) a✝ = (ULift.down f ULift.up) a✝
              @[simp]
              theorem ContinuousMap.uliftEquiv_symm_apply_apply (X : Type u) (Y : Type v) [TopologicalSpace X] [TopologicalSpace Y] (f : C(X, Y)) (a✝ : ULift.{v, u} X) :
              ((uliftEquiv X Y).symm f) a✝ = (ULift.up f ULift.down) a✝
              theorem IsOpen.trans {X : Type u} [TopologicalSpace X] {s : Set X} {t : Set s} (ht : IsOpen t) (hs : IsOpen s) :
              IsOpen (Subtype.val '' t)
              theorem IsClosed.trans {X : Type u} [TopologicalSpace X] {s : Set X} {t : Set s} (ht : IsClosed t) (hs : IsClosed s) :
              IsClosed (Subtype.val '' t)
              theorem nhdsSet_prod_le {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] (s : Set X) (t : Set Y) :

              The product of a neighborhood of s and a neighborhood of t is a neighborhood of s ×ˢ t, formulated in terms of a filter inequality.

              theorem Filter.eventually_nhdsSet_prod_iff {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {s : Set X} {t : Set Y} {p : X × YProp} :
              (∀ᶠ (q : X × Y) in nhdsSet (s ×ˢ t), p q) xs, yt, ∃ (px : XProp), (∀ᶠ (x' : X) in nhds x, px x') ∃ (py : YProp), (∀ᶠ (y' : Y) in nhds y, py y') ∀ {x : X}, px x∀ {y : Y}, py yp (x, y)
              theorem Filter.Eventually.prod_nhdsSet {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] {s : Set X} {t : Set Y} {p : X × YProp} {px : XProp} {py : YProp} (hp : ∀ {x : X}, px x∀ {y : Y}, py yp (x, y)) (hs : ∀ᶠ (x : X) in nhdsSet s, px x) (ht : ∀ᶠ (y : Y) in nhdsSet t, py y) :
              ∀ᶠ (q : X × Y) in nhdsSet (s ×ˢ t), p q