Documentation

Mathlib.Topology.DenseEmbedding

Dense embeddings #

This file defines three properties of functions:

The main theorem continuous_extend gives a criterion for a function f : X → Z to a T₃ space Z to extend along a dense embedding i : X → Y to a continuous function g : Y → Z. Actually i only has to be DenseInducing (not necessarily injective).

structure DenseInducing {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] (i : αβ) extends Inducing :

i : α → β is "dense inducing" if it has dense range and the topology on α is the one induced by i from the topology on β.

Instances For
    theorem DenseInducing.dense {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (self : DenseInducing i) :

    The range of a dense inducing map is a dense set.

    theorem DenseInducing.nhds_eq_comap {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) (a : α) :
    nhds a = Filter.comap i (nhds (i a))
    theorem DenseInducing.continuous {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) :
    theorem DenseInducing.closure_range {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) :
    closure (Set.range i) = Set.univ
    theorem DenseInducing.closure_image_mem_nhds {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} {s : Set α} {a : α} (di : DenseInducing i) (hs : s nhds a) :
    closure (i '' s) nhds (i a)
    theorem DenseInducing.dense_image {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) {s : Set α} :
    Dense (i '' s) Dense s
    theorem DenseInducing.interior_compact_eq_empty {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [T2Space β] (di : DenseInducing i) (hd : Dense (Set.range i)) {s : Set α} (hs : IsCompact s) :

    If i : α → β is a dense embedding with dense complement of the range, then any compact set in α has empty interior.

    theorem DenseInducing.prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ] {e₁ : αβ} {e₂ : γδ} (de₁ : DenseInducing e₁) (de₂ : DenseInducing e₂) :
    DenseInducing fun (p : α × γ) => (e₁ p.1, e₂ p.2)

    The product of two dense inducings is a dense inducing

    If the domain of a DenseInducing map is a separable space, then so is the codomain.

    theorem DenseInducing.tendsto_comap_nhds_nhds {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [TopologicalSpace δ] {f : γα} {g : γδ} {h : δβ} {d : δ} {a : α} (di : DenseInducing i) (H : Filter.Tendsto h (nhds d) (nhds (i a))) (comm : h g = i f) :
     γ -f→ α
    g↓     ↓e
     δ -h→ β
    
    theorem DenseInducing.nhdsWithin_neBot {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) (b : β) :
    (nhdsWithin b (Set.range i)).NeBot
    theorem DenseInducing.comap_nhds_neBot {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) (b : β) :
    (Filter.comap i (nhds b)).NeBot
    def DenseInducing.extend {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [TopologicalSpace γ] (di : DenseInducing i) (f : αγ) (b : β) :
    γ

    If i : α → β is a dense inducing, then any function f : α → γ "extends" to a function g = DenseInducing.extend di f : β → γ. If γ is Hausdorff and f has a continuous extension, then g is the unique such extension. In general, g might not be continuous or even extend f.

    Equations
    Instances For
      theorem DenseInducing.extend_eq_of_tendsto {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) [TopologicalSpace γ] [T2Space γ] {b : β} {c : γ} {f : αγ} (hf : Filter.Tendsto f (Filter.comap i (nhds b)) (nhds c)) :
      di.extend f b = c
      theorem DenseInducing.extend_eq_at {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) [TopologicalSpace γ] [T2Space γ] {f : αγ} {a : α} (hf : ContinuousAt f a) :
      di.extend f (i a) = f a
      theorem DenseInducing.extend_eq_at' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) [TopologicalSpace γ] [T2Space γ] {f : αγ} {a : α} (c : γ) (hf : Filter.Tendsto f (nhds a) (nhds c)) :
      di.extend f (i a) = f a
      theorem DenseInducing.extend_eq {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} (di : DenseInducing i) [TopologicalSpace γ] [T2Space γ] {f : αγ} (hf : Continuous f) (a : α) :
      di.extend f (i a) = f a
      theorem DenseInducing.extend_eq' {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [TopologicalSpace γ] [T2Space γ] {f : αγ} (di : DenseInducing i) (hf : ∀ (b : β), ∃ (c : γ), Filter.Tendsto f (Filter.comap i (nhds b)) (nhds c)) (a : α) :
      di.extend f (i a) = f a

      Variation of extend_eq where we ask that f has a limit along comap i (𝓝 b) for each b : β. This is a strictly stronger assumption than continuity of f, but in a lot of cases you'd have to prove it anyway to use continuous_extend, so this avoids doing the work twice.

      theorem DenseInducing.extend_unique_at {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [TopologicalSpace γ] [T2Space γ] {b : β} {f : αγ} {g : βγ} (di : DenseInducing i) (hf : ∀ᶠ (x : α) in Filter.comap i (nhds b), g (i x) = f x) (hg : ContinuousAt g b) :
      di.extend f b = g b
      theorem DenseInducing.extend_unique {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [TopologicalSpace γ] [T2Space γ] {f : αγ} {g : βγ} (di : DenseInducing i) (hf : ∀ (x : α), g (i x) = f x) (hg : Continuous g) :
      di.extend f = g
      theorem DenseInducing.continuousAt_extend {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [TopologicalSpace γ] [T3Space γ] {b : β} {f : αγ} (di : DenseInducing i) (hf : ∀ᶠ (x : β) in nhds b, ∃ (c : γ), Filter.Tendsto f (Filter.comap i (nhds x)) (nhds c)) :
      ContinuousAt (di.extend f) b
      theorem DenseInducing.continuous_extend {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace α] [TopologicalSpace β] {i : αβ} [TopologicalSpace γ] [T3Space γ] {f : αγ} (di : DenseInducing i) (hf : ∀ (b : β), ∃ (c : γ), Filter.Tendsto f (Filter.comap i (nhds b)) (nhds c)) :
      Continuous (di.extend f)
      theorem DenseInducing.mk' {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] (i : αβ) (c : Continuous i) (dense : ∀ (x : β), x closure (Set.range i)) (H : ∀ (a : α), snhds a, tnhds (i a), ∀ (b : α), i b tb s) :
      structure DenseEmbedding {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] (e : αβ) extends DenseInducing :

      A dense embedding is an embedding with dense image.

      Instances For
        theorem DenseEmbedding.inj {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {e : αβ} (self : DenseEmbedding e) :

        A dense embedding is injective.

        theorem DenseEmbedding.mk' {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] (e : αβ) (c : Continuous e) (dense : DenseRange e) (inj : Function.Injective e) (H : ∀ (a : α), snhds a, tnhds (e a), ∀ (b : α), e b tb s) :
        theorem DenseEmbedding.inj_iff {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {e : αβ} (de : DenseEmbedding e) {x : α} {y : α} :
        e x = e y x = y
        theorem DenseEmbedding.to_embedding {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {e : αβ} (de : DenseEmbedding e) :

        If the domain of a DenseEmbedding is a separable space, then so is its codomain.

        theorem DenseEmbedding.prod {α : Type u_1} {β : Type u_2} {γ : Type u_3} {δ : Type u_4} [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ] {e₁ : αβ} {e₂ : γδ} (de₁ : DenseEmbedding e₁) (de₂ : DenseEmbedding e₂) :
        DenseEmbedding fun (p : α × γ) => (e₁ p.1, e₂ p.2)

        The product of two dense embeddings is a dense embedding.

        @[simp]
        theorem DenseEmbedding.subtypeEmb_coe {β : Type u_2} [TopologicalSpace β] {α : Type u_5} (p : αProp) (e : αβ) (x : { x : α // p x }) :
        (DenseEmbedding.subtypeEmb p e x) = e x
        def DenseEmbedding.subtypeEmb {β : Type u_2} [TopologicalSpace β] {α : Type u_5} (p : αProp) (e : αβ) (x : { x : α // p x }) :
        { x : β // x closure (e '' {x : α | p x}) }

        The dense embedding of a subtype inside its closure.

        Equations
        Instances For
          theorem DenseEmbedding.subtype {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {e : αβ} (de : DenseEmbedding e) (p : αProp) :
          theorem DenseEmbedding.dense_image {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] {e : αβ} (de : DenseEmbedding e) {s : Set α} :
          Dense (e '' s) Dense s
          theorem Dense.denseEmbedding_val {α : Type u_1} [TopologicalSpace α] {s : Set α} (hs : Dense s) :
          DenseEmbedding Subtype.val
          theorem isClosed_property {α : Type u_1} {β : Type u_2} [TopologicalSpace β] {e : αβ} {p : βProp} (he : DenseRange e) (hp : IsClosed {x : β | p x}) (h : ∀ (a : α), p (e a)) (b : β) :
          p b
          theorem isClosed_property2 {α : Type u_1} {β : Type u_2} [TopologicalSpace β] {e : αβ} {p : ββProp} (he : DenseRange e) (hp : IsClosed {q : β × β | p q.1 q.2}) (h : ∀ (a₁ a₂ : α), p (e a₁) (e a₂)) (b₁ : β) (b₂ : β) :
          p b₁ b₂
          theorem isClosed_property3 {α : Type u_1} {β : Type u_2} [TopologicalSpace β] {e : αβ} {p : βββProp} (he : DenseRange e) (hp : IsClosed {q : β × β × β | p q.1 q.2.1 q.2.2}) (h : ∀ (a₁ a₂ a₃ : α), p (e a₁) (e a₂) (e a₃)) (b₁ : β) (b₂ : β) (b₃ : β) :
          p b₁ b₂ b₃
          theorem DenseRange.induction_on {α : Type u_1} {β : Type u_2} [TopologicalSpace β] {e : αβ} (he : DenseRange e) {p : βProp} (b₀ : β) (hp : IsClosed {b : β | p b}) (ih : ∀ (a : α), p (e a)) :
          p b₀
          theorem DenseRange.induction_on₂ {α : Type u_1} {β : Type u_2} [TopologicalSpace β] {e : αβ} {p : ββProp} (he : DenseRange e) (hp : IsClosed {q : β × β | p q.1 q.2}) (h : ∀ (a₁ a₂ : α), p (e a₁) (e a₂)) (b₁ : β) (b₂ : β) :
          p b₁ b₂
          theorem DenseRange.induction_on₃ {α : Type u_1} {β : Type u_2} [TopologicalSpace β] {e : αβ} {p : βββProp} (he : DenseRange e) (hp : IsClosed {q : β × β × β | p q.1 q.2.1 q.2.2}) (h : ∀ (a₁ a₂ a₃ : α), p (e a₁) (e a₂) (e a₃)) (b₁ : β) (b₂ : β) (b₃ : β) :
          p b₁ b₂ b₃
          theorem DenseRange.equalizer {α : Type u_1} {β : Type u_2} {γ : Type u_3} [TopologicalSpace β] [TopologicalSpace γ] [T2Space γ] {f : αβ} (hfd : DenseRange f) {g : βγ} {h : βγ} (hg : Continuous g) (hh : Continuous h) (H : g f = h f) :
          g = h

          Two continuous functions to a t2-space that agree on the dense range of a function are equal.

          theorem Filter.HasBasis.hasBasis_of_denseInducing {α : Type u_1} {β : Type u_2} [TopologicalSpace α] [TopologicalSpace β] [T3Space β] {ι : Type u_5} {s : ιSet α} {p : ιProp} {x : α} (h : (nhds x).HasBasis p s) {f : αβ} (hf : DenseInducing f) :
          (nhds (f x)).HasBasis p fun (i : ι) => closure (f '' s i)