[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : Finite ι
inst✝ : (i : ι) → TopologicalSpace (π i)
h : PseudoMetrizableSpace X
⊢ FirstCountableTopology X
[PROOFSTEP]
rcases h with ⟨_, hm⟩
[GOAL]
case mk.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : Finite ι
inst✝ : (i : ι) → TopologicalSpace (π i)
w✝ : PseudoMetricSpace X
hm : UniformSpace.toTopologicalSpace = inst✝³
⊢ FirstCountableTopology X
[PROOFSTEP]
rw [← hm]
[GOAL]
case mk.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : Finite ι
inst✝ : (i : ι) → TopologicalSpace (π i)
w✝ : PseudoMetricSpace X
hm : UniformSpace.toTopologicalSpace = inst✝³
⊢ FirstCountableTopology X
[PROOFSTEP]
exact @UniformSpace.firstCountableTopology X PseudoMetricSpace.toUniformSpace EMetric.instIsCountablyGeneratedUniformity
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), PseudoMetrizableSpace (π i)
⊢ PseudoMetrizableSpace ((i : ι) → π i)
[PROOFSTEP]
cases nonempty_fintype ι
[GOAL]
case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), PseudoMetrizableSpace (π i)
val✝ : Fintype ι
⊢ PseudoMetrizableSpace ((i : ι) → π i)
[PROOFSTEP]
letI := fun i => pseudoMetrizableSpacePseudoMetric (π i)
[GOAL]
case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), PseudoMetrizableSpace (π i)
val✝ : Fintype ι
this : (i : ι) → PseudoMetricSpace (π i) := fun i => pseudoMetrizableSpacePseudoMetric (π i)
⊢ PseudoMetrizableSpace ((i : ι) → π i)
[PROOFSTEP]
infer_instance
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), MetrizableSpace (π i)
⊢ MetrizableSpace ((i : ι) → π i)
[PROOFSTEP]
cases nonempty_fintype ι
[GOAL]
case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), MetrizableSpace (π i)
val✝ : Fintype ι
⊢ MetrizableSpace ((i : ι) → π i)
[PROOFSTEP]
letI := fun i => metrizableSpaceMetric (π i)
[GOAL]
case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : ∀ (i : ι), MetrizableSpace (π i)
val✝ : Fintype ι
this : (i : ι) → MetricSpace (π i) := fun i => metrizableSpaceMetric (π i)
⊢ MetrizableSpace ((i : ι) → π i)
[PROOFSTEP]
infer_instance
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
⊢ SecondCountableTopology ↑s
[PROOFSTEP]
letI := pseudoMetrizableSpacePseudoMetric X
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
this : PseudoMetricSpace X := pseudoMetrizableSpacePseudoMetric X
⊢ SecondCountableTopology ↑s
[PROOFSTEP]
have := hs.separableSpace
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : Finite ι
inst✝¹ : (i : ι) → TopologicalSpace (π i)
inst✝ : PseudoMetrizableSpace X
s : Set X
hs : IsSeparable s
this✝ : PseudoMetricSpace X := pseudoMetrizableSpacePseudoMetric X
this : SeparableSpace ↑s
⊢ SecondCountableTopology ↑s
[PROOFSTEP]
exact UniformSpace.secondCountable_of_separable s
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
⊢ ∃ f, Embedding f
[PROOFSTEP]
haveI : NormalSpace X := normalSpaceOfT3SecondCountable X
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this : NormalSpace X
⊢ ∃ f, Embedding f
[PROOFSTEP]
rcases exists_countable_basis X with ⟨B, hBc, -, hB⟩
[GOAL]
case intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
⊢ ∃ f, Embedding f
[PROOFSTEP]
let s : Set (Set X × Set X) :=
  {UV ∈ B ×ˢ B | closure UV.1 ⊆ UV.2}
    -- `s` is a countable set.
[GOAL]
case intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
⊢ ∃ f, Embedding f
[PROOFSTEP]
haveI : Encodable s := ((hBc.prod hBc).mono (inter_subset_left _ _)).toEncodable
[GOAL]
case intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this : Encodable ↑s
⊢ ∃ f, Embedding f
[PROOFSTEP]
letI : TopologicalSpace s := ⊥
[GOAL]
case intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝¹ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝ : Encodable ↑s
this : TopologicalSpace ↑s := ⊥
⊢ ∃ f, Embedding f
[PROOFSTEP]
haveI : DiscreteTopology s := ⟨rfl⟩
[GOAL]
case intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
⊢ ∃ f, Embedding f
[PROOFSTEP]
rsuffices ⟨f, hf⟩ : ∃ f : X → s →ᵇ ℝ, Embedding f
[GOAL]
case intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
f : X → ↑s →ᵇ ℝ
hf : Embedding f
⊢ ∃ f, Embedding f
[PROOFSTEP]
exact
  ⟨fun x => (f x).extend (Encodable.encode' s) 0,
    (BoundedContinuousFunction.isometry_extend (Encodable.encode' s) (0 : ℕ →ᵇ ℝ)).embedding.comp hf⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
⊢ ∃ f, Embedding f
[PROOFSTEP]
have hd : ∀ UV : s, Disjoint (closure UV.1.1) UV.1.2ᶜ := fun UV =>
  disjoint_compl_right.mono_right
    (compl_subset_compl.2 UV.2.2)
      -- Choose a sequence of `εₙ > 0`, `n : s`, that is bounded above by `1` and tends to zero
        -- along the `cofinite` filter.
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
⊢ ∃ f, Embedding f
[PROOFSTEP]
obtain ⟨ε, ε01, hε⟩ : ∃ ε : s → ℝ, (∀ UV, ε UV ∈ Ioc (0 : ℝ) 1) ∧ Tendsto ε cofinite (𝓝 0) :=
  by
  rcases posSumOfEncodable zero_lt_one s with ⟨ε, ε0, c, hεc, hc1⟩
  refine' ⟨ε, fun UV => ⟨ε0 UV, _⟩, hεc.summable.tendsto_cofinite_zero⟩
  exact (le_hasSum hεc UV fun _ _ => (ε0 _).le).trans hc1
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
⊢ ∃ ε, (∀ (UV : ↑s), ε UV ∈ Ioc 0 1) ∧ Tendsto ε cofinite (𝓝 0)
[PROOFSTEP]
rcases posSumOfEncodable zero_lt_one s with ⟨ε, ε0, c, hεc, hc1⟩
[GOAL]
case mk.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε0 : ∀ (i : ↑s), 0 < ε i
c : ℝ
hεc : HasSum ε c
hc1 : c ≤ 1
⊢ ∃ ε, (∀ (UV : ↑s), ε UV ∈ Ioc 0 1) ∧ Tendsto ε cofinite (𝓝 0)
[PROOFSTEP]
refine' ⟨ε, fun UV => ⟨ε0 UV, _⟩, hεc.summable.tendsto_cofinite_zero⟩
[GOAL]
case mk.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε0 : ∀ (i : ↑s), 0 < ε i
c : ℝ
hεc : HasSum ε c
hc1 : c ≤ 1
UV : ↑s
⊢ ε UV ≤ 1
[PROOFSTEP]
exact (le_hasSum hεc UV fun _ _ => (ε0 _).le).trans hc1
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
⊢ ∃ f, Embedding f
[PROOFSTEP]
have : ∀ UV : s, ∃ f : C(X, ℝ), EqOn f 0 UV.1.1 ∧ EqOn f (fun _ => ε UV) UV.1.2ᶜ ∧ ∀ x, f x ∈ Icc 0 (ε UV) :=
  by
  intro UV
  rcases exists_continuous_zero_one_of_closed isClosed_closure (hB.isOpen UV.2.1.2).isClosed_compl (hd UV) with
    ⟨f, hf₀, hf₁, hf01⟩
  exact
    ⟨ε UV • f, fun x hx => by simp [hf₀ (subset_closure hx)], fun x hx => by simp [hf₁ hx], fun x =>
      ⟨mul_nonneg (ε01 _).1.le (hf01 _).1, mul_le_of_le_one_right (ε01 _).1.le (hf01 _).2⟩⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
⊢ ∀ (UV : ↑s), ∃ f, EqOn (↑f) 0 (↑UV).fst ∧ EqOn (↑f) (fun x => ε UV) (↑UV).sndᶜ ∧ ∀ (x : X), ↑f x ∈ Icc 0 (ε UV)
[PROOFSTEP]
intro UV
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
UV : ↑s
⊢ ∃ f, EqOn (↑f) 0 (↑UV).fst ∧ EqOn (↑f) (fun x => ε UV) (↑UV).sndᶜ ∧ ∀ (x : X), ↑f x ∈ Icc 0 (ε UV)
[PROOFSTEP]
rcases exists_continuous_zero_one_of_closed isClosed_closure (hB.isOpen UV.2.1.2).isClosed_compl (hd UV) with
  ⟨f, hf₀, hf₁, hf01⟩
[GOAL]
case intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
UV : ↑s
f : C(X, ℝ)
hf₀ : EqOn (↑f) 0 (closure (↑UV).fst)
hf₁ : EqOn (↑f) 1 (↑UV).sndᶜ
hf01 : ∀ (x : X), ↑f x ∈ Icc 0 1
⊢ ∃ f, EqOn (↑f) 0 (↑UV).fst ∧ EqOn (↑f) (fun x => ε UV) (↑UV).sndᶜ ∧ ∀ (x : X), ↑f x ∈ Icc 0 (ε UV)
[PROOFSTEP]
exact
  ⟨ε UV • f, fun x hx => by simp [hf₀ (subset_closure hx)], fun x hx => by simp [hf₁ hx], fun x =>
    ⟨mul_nonneg (ε01 _).1.le (hf01 _).1, mul_le_of_le_one_right (ε01 _).1.le (hf01 _).2⟩⟩
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
UV : ↑s
f : C(X, ℝ)
hf₀ : EqOn (↑f) 0 (closure (↑UV).fst)
hf₁ : EqOn (↑f) 1 (↑UV).sndᶜ
hf01 : ∀ (x : X), ↑f x ∈ Icc 0 1
x : X
hx : x ∈ (↑UV).fst
⊢ ↑(ε UV • f) x = OfNat.ofNat 0 x
[PROOFSTEP]
simp [hf₀ (subset_closure hx)]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
UV : ↑s
f : C(X, ℝ)
hf₀ : EqOn (↑f) 0 (closure (↑UV).fst)
hf₁ : EqOn (↑f) 1 (↑UV).sndᶜ
hf01 : ∀ (x : X), ↑f x ∈ Icc 0 1
x : X
hx : x ∈ (↑UV).sndᶜ
⊢ ↑(ε UV • f) x = (fun x => ε UV) x
[PROOFSTEP]
simp [hf₁ hx]
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝³ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝² : Encodable ↑s
this✝¹ : TopologicalSpace ↑s := ⊥
this✝ : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
this : ∀ (UV : ↑s), ∃ f, EqOn (↑f) 0 (↑UV).fst ∧ EqOn (↑f) (fun x => ε UV) (↑UV).sndᶜ ∧ ∀ (x : X), ↑f x ∈ Icc 0 (ε UV)
⊢ ∃ f, Embedding f
[PROOFSTEP]
choose f hf0 hfε hf0ε using this
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
⊢ ∃ f, Embedding f
[PROOFSTEP]
have hf01 : ∀ UV x, f UV x ∈ Icc (0 : ℝ) 1 := fun UV x =>
  Icc_subset_Icc_right (ε01 _).2
    (hf0ε _ _)
      -- The embedding is given by `F x UV = f UV x`.
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
⊢ ∃ f, Embedding f
[PROOFSTEP]
set F : X → s →ᵇ ℝ := fun x =>
  ⟨⟨fun UV => f UV x, continuous_of_discreteTopology⟩, 1, fun UV₁ UV₂ =>
    Real.dist_le_of_mem_Icc_01 (hf01 _ _) (hf01 _ _)⟩
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
⊢ ∃ f, Embedding f
[PROOFSTEP]
have hF : ∀ x UV, F x UV = f UV x := fun _ _ => rfl
[GOAL]
case intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
⊢ ∃ f, Embedding f
[PROOFSTEP]
refine' ⟨F, Embedding.mk' _ (fun x y hxy => _) fun x => le_antisymm _ _⟩
[GOAL]
case intro.intro.refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x y : X
hxy : F x = F y
⊢ x = y
[PROOFSTEP]
by_contra Hne
[GOAL]
case intro.intro.refine'_1
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x y : X
hxy : F x = F y
Hne : ¬x = y
⊢ False
[PROOFSTEP]
rcases hB.mem_nhds_iff.1 (isOpen_ne.mem_nhds Hne) with ⟨V, hVB, hxV, hVy⟩
[GOAL]
case intro.intro.refine'_1.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x y : X
hxy : F x = F y
Hne : ¬x = y
V : Set X
hVB : V ∈ B
hxV : x ∈ V
hVy : V ⊆ {y_1 | y_1 ≠ y}
⊢ False
[PROOFSTEP]
rcases hB.exists_closure_subset (hB.mem_nhds hVB hxV) with ⟨U, hUB, hxU, hUV⟩
[GOAL]
case intro.intro.refine'_1.intro.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x y : X
hxy : F x = F y
Hne : ¬x = y
V : Set X
hVB : V ∈ B
hxV : x ∈ V
hVy : V ⊆ {y_1 | y_1 ≠ y}
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
⊢ False
[PROOFSTEP]
set UV : ↥s := ⟨(U, V), ⟨hUB, hVB⟩, hUV⟩
[GOAL]
case intro.intro.refine'_1.intro.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x y : X
hxy : F x = F y
Hne : ¬x = y
V : Set X
hVB : V ∈ B
hxV : x ∈ V
hVy : V ⊆ {y_1 | y_1 ≠ y}
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
⊢ False
[PROOFSTEP]
apply (ε01 UV).1.ne
[GOAL]
case intro.intro.refine'_1.intro.intro.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x y : X
hxy : F x = F y
Hne : ¬x = y
V : Set X
hVB : V ∈ B
hxV : x ∈ V
hVy : V ⊆ {y_1 | y_1 ≠ y}
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
⊢ 0 = ε UV
[PROOFSTEP]
calc
  (0 : ℝ) = F x UV := (hf0 UV hxU).symm
  _ = F y UV := by rw [hxy]
  _ = ε UV := hfε UV fun h : y ∈ V => hVy h rfl
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x y : X
hxy : F x = F y
Hne : ¬x = y
V : Set X
hVB : V ∈ B
hxV : x ∈ V
hVy : V ⊆ {y_1 | y_1 ≠ y}
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
⊢ ↑(F x) UV = ↑(F y) UV
[PROOFSTEP]
rw [hxy]
[GOAL]
case intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
⊢ comap F (𝓝 (F x)) ≤ 𝓝 x
[PROOFSTEP]
refine' ((nhds_basis_ball.comap _).le_basis_iff hB.nhds_hasBasis).2 _
[GOAL]
case intro.intro.refine'_2
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
⊢ ∀ (i' : Set X), i' ∈ B ∧ x ∈ i' → ∃ i, 0 < i ∧ F ⁻¹' ball (F x) i ⊆ i'
[PROOFSTEP]
rintro V ⟨hVB, hxV⟩
[GOAL]
case intro.intro.refine'_2.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
⊢ ∃ i, 0 < i ∧ F ⁻¹' ball (F x) i ⊆ V
[PROOFSTEP]
rcases hB.exists_closure_subset (hB.mem_nhds hVB hxV) with ⟨U, hUB, hxU, hUV⟩
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
⊢ ∃ i, 0 < i ∧ F ⁻¹' ball (F x) i ⊆ V
[PROOFSTEP]
set UV : ↥s := ⟨(U, V), ⟨hUB, hVB⟩, hUV⟩
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
⊢ ∃ i, 0 < i ∧ F ⁻¹' ball (F x) i ⊆ V
[PROOFSTEP]
refine' ⟨ε UV, (ε01 UV).1, fun y (hy : dist (F y) (F x) < ε UV) => _⟩
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
y : X
hy : dist (F y) (F x) < ε UV
⊢ y ∈ V
[PROOFSTEP]
replace hy : dist (F y UV) (F x UV) < ε UV
[GOAL]
case hy
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
y : X
hy : dist (F y) (F x) < ε UV
⊢ dist (↑(F y) UV) (↑(F x) UV) < ε UV
case intro.intro.refine'_2.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
y : X
hy : dist (↑(F y) UV) (↑(F x) UV) < ε UV
⊢ y ∈ V
[PROOFSTEP]
exact (BoundedContinuousFunction.dist_coe_le_dist _).trans_lt hy
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
y : X
hy : dist (↑(F y) UV) (↑(F x) UV) < ε UV
⊢ y ∈ V
[PROOFSTEP]
contrapose! hy
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
y : X
hy : ¬y ∈ V
⊢ ε { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) } ≤
    dist
      (↑((fun x =>
              { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
                map_bounded' :=
                  (_ :
                    ∃ C,
                      ∀ (x_1 y : ↑s),
                        dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                            (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                          C) })
            y)
        { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) })
      (↑((fun x =>
              { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
                map_bounded' :=
                  (_ :
                    ∃ C,
                      ∀ (x_1 y : ↑s),
                        dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                            (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                          C) })
            x)
        { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) })
[PROOFSTEP]
rw [hF, hF, hfε UV hy, hf0 UV hxU, Pi.zero_apply, dist_zero_right]
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
V : Set X
hVB : V ∈ B
hxV : x ∈ V
U : Set X
hUB : U ∈ B
hxU : x ∈ U
hUV : closure U ⊆ V
UV : ↑s := { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) }
y : X
hy : ¬y ∈ V
⊢ ε { val := (U, V), property := (_ : (U, V) ∈ B ×ˢ B ∧ closure (U, V).fst ⊆ (U, V).snd) } ≤ ‖(fun x => ε UV) y‖
[PROOFSTEP]
exact le_abs_self _
[GOAL]
case intro.intro.refine'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
⊢ 𝓝 x ≤ comap F (𝓝 (F x))
[PROOFSTEP]
refine' (nhds_basis_closedBall.comap _).ge_iff.2 fun δ δ0 => _
[GOAL]
case intro.intro.refine'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
⊢ F ⁻¹' closedBall (F x) δ ∈ 𝓝 x
[PROOFSTEP]
have h_fin : {UV : s | δ ≤ ε UV}.Finite := by simpa only [← not_lt] using hε (gt_mem_nhds δ0)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
⊢ Set.Finite {UV | δ ≤ ε UV}
[PROOFSTEP]
simpa only [← not_lt] using hε (gt_mem_nhds δ0)
[GOAL]
case intro.intro.refine'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
⊢ F ⁻¹' closedBall (F x) δ ∈ 𝓝 x
[PROOFSTEP]
have : ∀ᶠ y in 𝓝 x, ∀ UV, δ ≤ ε UV → dist (F y UV) (F x UV) ≤ δ :=
  by
  refine' (eventually_all_finite h_fin).2 fun UV _ => _
  exact (f UV).continuous.tendsto x (closedBall_mem_nhds _ δ0)
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
⊢ ∀ᶠ (y : X) in 𝓝 x, ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
[PROOFSTEP]
refine' (eventually_all_finite h_fin).2 fun UV _ => _
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝² : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝¹ : Encodable ↑s
this✝ : TopologicalSpace ↑s := ⊥
this : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
UV : ↑s
x✝ : UV ∈ {UV | δ ≤ ε UV}
⊢ ∀ᶠ (x_1 : X) in 𝓝 x, dist (↑(F x_1) UV) (↑(F x) UV) ≤ δ
[PROOFSTEP]
exact (f UV).continuous.tendsto x (closedBall_mem_nhds _ δ0)
[GOAL]
case intro.intro.refine'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝³ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝² : Encodable ↑s
this✝¹ : TopologicalSpace ↑s := ⊥
this✝ : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
this : ∀ᶠ (y : X) in 𝓝 x, ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
⊢ F ⁻¹' closedBall (F x) δ ∈ 𝓝 x
[PROOFSTEP]
refine' this.mono fun y hy => (BoundedContinuousFunction.dist_le δ0.le).2 fun UV => _
[GOAL]
case intro.intro.refine'_3
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝³ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝² : Encodable ↑s
this✝¹ : TopologicalSpace ↑s := ⊥
this✝ : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
this : ∀ᶠ (y : X) in 𝓝 x, ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
y : X
hy : ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
UV : ↑s
⊢ dist (↑(F y) UV) (↑(F x) UV) ≤ δ
[PROOFSTEP]
cases' le_total δ (ε UV) with hle hle
[GOAL]
case intro.intro.refine'_3.inl
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝³ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝² : Encodable ↑s
this✝¹ : TopologicalSpace ↑s := ⊥
this✝ : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
this : ∀ᶠ (y : X) in 𝓝 x, ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
y : X
hy : ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
UV : ↑s
hle : δ ≤ ε UV
⊢ dist (↑(F y) UV) (↑(F x) UV) ≤ δ
case intro.intro.refine'_3.inr
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝³ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝² : Encodable ↑s
this✝¹ : TopologicalSpace ↑s := ⊥
this✝ : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
this : ∀ᶠ (y : X) in 𝓝 x, ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
y : X
hy : ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
UV : ↑s
hle : ε UV ≤ δ
⊢ dist (↑(F y) UV) (↑(F x) UV) ≤ δ
[PROOFSTEP]
exacts [hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
[GOAL]
ι : Type u_1
X : Type u_2
Y : Type u_3
π : ι → Type u_4
inst✝⁵ : TopologicalSpace X
inst✝⁴ : TopologicalSpace Y
inst✝³ : Finite ι
inst✝² : (i : ι) → TopologicalSpace (π i)
inst✝¹ : T3Space X
inst✝ : SecondCountableTopology X
this✝³ : NormalSpace X
B : Set (Set X)
hBc : Set.Countable B
hB : IsTopologicalBasis B
s : Set (Set X × Set X) := {UV | UV ∈ B ×ˢ B ∧ closure UV.fst ⊆ UV.snd}
this✝² : Encodable ↑s
this✝¹ : TopologicalSpace ↑s := ⊥
this✝ : DiscreteTopology ↑s
hd : ∀ (UV : ↑s), Disjoint (closure (↑UV).fst) (↑UV).sndᶜ
ε : ↑s → ℝ
ε01 : ∀ (UV : ↑s), ε UV ∈ Ioc 0 1
hε : Tendsto ε cofinite (𝓝 0)
f : ↑s → C(X, ℝ)
hf0 : ∀ (UV : ↑s), EqOn (↑(f UV)) 0 (↑UV).fst
hfε : ∀ (UV : ↑s), EqOn (↑(f UV)) (fun x => ε UV) (↑UV).sndᶜ
hf0ε : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 (ε UV)
hf01 : ∀ (UV : ↑s) (x : X), ↑(f UV) x ∈ Icc 0 1
F : X → ↑s →ᵇ ℝ :=
  fun x =>
    { toContinuousMap := ContinuousMap.mk fun UV => ↑(f UV) x,
      map_bounded' :=
        (_ :
          ∃ C,
            ∀ (x_1 y : ↑s),
              dist (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) x_1)
                  (ContinuousMap.toFun (ContinuousMap.mk fun UV => ↑(f UV) x) y) ≤
                C) }
hF : ∀ (x : X) (UV : ↑s), ↑(F x) UV = ↑(f UV) x
x : X
δ : ℝ
δ0 : 0 < δ
h_fin : Set.Finite {UV | δ ≤ ε UV}
this : ∀ᶠ (y : X) in 𝓝 x, ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
y : X
hy : ∀ (UV : ↑s), δ ≤ ε UV → dist (↑(F y) UV) (↑(F x) UV) ≤ δ
UV : ↑s
hle : ε UV ≤ δ
⊢ ε UV - 0 ≤ δ
[PROOFSTEP]
rwa [sub_zero]


[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set α
b : β
⊢ b ∈ upperBounds (l '' s) ↔ b ∈ u ⁻¹' upperBounds s
[PROOFSTEP]
simp [upperBounds, gc _ _]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set α
x✝ : BddAbove (l '' s)
x : β
hx : x ∈ upperBounds (l '' s)
⊢ u x ∈ upperBounds s
[PROOFSTEP]
rwa [gc.upperBounds_l_image] at hx
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set α
a : α
h : IsLUB s a
b : β
hb : b ∈ upperBounds (l '' s)
⊢ u b ∈ upperBounds s
[PROOFSTEP]
rwa [gc.upperBounds_l_image] at hb
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : PartialOrder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
z : α
y : β
⊢ u y = z ↔ ∀ (x : α), x ≤ z ↔ l x ≤ y
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : PartialOrder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
z : α
y : β
⊢ u y = z → ∀ (x : α), x ≤ z ↔ l x ≤ y
[PROOFSTEP]
rintro rfl x
[GOAL]
case mp
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : PartialOrder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
y : β
x : α
⊢ x ≤ u y ↔ l x ≤ y
[PROOFSTEP]
exact (gc x y).symm
[GOAL]
case mpr
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : PartialOrder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
z : α
y : β
⊢ (∀ (x : α), x ≤ z ↔ l x ≤ y) → u y = z
[PROOFSTEP]
intro H
[GOAL]
case mpr
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : PartialOrder α
inst✝ : Preorder β
l : α → β
u : β → α
gc : GaloisConnection l u
z : α
y : β
H : ∀ (x : α), x ≤ z ↔ l x ≤ y
⊢ u y = z
[PROOFSTEP]
exact ((H <| u y).mpr (gc.l_u_le y)).antisymm ((gc _ _).mp <| (H z).mp le_rfl)
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : PartialOrder β
l : α → β
u : β → α
gc : GaloisConnection l u
x : α
z : β
⊢ l x = z ↔ ∀ (y : β), z ≤ y ↔ x ≤ u y
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : PartialOrder β
l : α → β
u : β → α
gc : GaloisConnection l u
x : α
z : β
⊢ l x = z → ∀ (y : β), z ≤ y ↔ x ≤ u y
[PROOFSTEP]
rintro rfl y
[GOAL]
case mp
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : PartialOrder β
l : α → β
u : β → α
gc : GaloisConnection l u
x : α
y : β
⊢ l x ≤ y ↔ x ≤ u y
[PROOFSTEP]
exact gc x y
[GOAL]
case mpr
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : PartialOrder β
l : α → β
u : β → α
gc : GaloisConnection l u
x : α
z : β
⊢ (∀ (y : β), z ≤ y ↔ x ≤ u y) → l x = z
[PROOFSTEP]
intro H
[GOAL]
case mpr
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : PartialOrder β
l : α → β
u : β → α
gc : GaloisConnection l u
x : α
z : β
H : ∀ (y : β), z ≤ y ↔ x ≤ u y
⊢ l x = z
[PROOFSTEP]
exact ((gc _ _).mpr <| (H z).mp le_rfl).antisymm ((H <| l x).mpr (gc.le_u_l x))
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
l : α → β
u : β → α
gc : GaloisConnection l u
⊢ IsLUB (l '' {a₁, a₂}) (l a₁ ⊔ l a₂)
[PROOFSTEP]
simp only [image_pair, isLUB_pair]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
l : α → β
u : β → α
gc : GaloisConnection l u
f : ι → α
⊢ IsLUB (range (l ∘ f)) (l (iSup f))
[PROOFSTEP]
rw [range_comp, ← sSup_range]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
l : α → β
u : β → α
gc : GaloisConnection l u
f : ι → α
⊢ IsLUB (l '' range f) (l (sSup (range f)))
[PROOFSTEP]
exact gc.isLUB_l_image (isLUB_sSup _)
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
l : α → β
u : β → α
gc : GaloisConnection l u
f : (i : ι) → κ i → α
⊢ l (⨆ (i : ι) (j : κ i), f i j) = ⨆ (i : ι) (j : κ i), l (f i j)
[PROOFSTEP]
simp_rw [gc.l_iSup]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
l : α → β
u : β → α
gc : GaloisConnection l u
s : Set α
⊢ l (sSup s) = ⨆ (a : α) (_ : a ∈ s), l a
[PROOFSTEP]
simp only [sSup_eq_iSup, gc.l_iSup]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝² : Preorder α
inst✝¹ : Preorder β
inst✝ : Preorder γ
l1 : α → β
u1 : β → α
l2 : β → γ
u2 : γ → β
gc1 : GaloisConnection l1 u1
gc2 : GaloisConnection l2 u2
⊢ GaloisConnection (l2 ∘ l1) (u1 ∘ u2)
[PROOFSTEP]
intro a b
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝² : Preorder α
inst✝¹ : Preorder β
inst✝ : Preorder γ
l1 : α → β
u1 : β → α
l2 : β → γ
u2 : γ → β
gc1 : GaloisConnection l1 u1
gc2 : GaloisConnection l2 u2
a : α
b : γ
⊢ (l2 ∘ l1) a ≤ b ↔ a ≤ (u1 ∘ u2) b
[PROOFSTEP]
dsimp
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝² : Preorder α
inst✝¹ : Preorder β
inst✝ : Preorder γ
l1 : α → β
u1 : β → α
l2 : β → γ
u2 : γ → β
gc1 : GaloisConnection l1 u1
gc2 : GaloisConnection l2 u2
a : α
b : γ
⊢ l2 (l1 a) ≤ b ↔ a ≤ u1 (u2 b)
[PROOFSTEP]
rw [gc2, gc1]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
l : α → β
u : β → α
gc : GaloisConnection l u
⊢ GaloisConnection (compl ∘ u ∘ compl) (compl ∘ l ∘ compl)
[PROOFSTEP]
intro a b
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
l : α → β
u : β → α
gc : GaloisConnection l u
a : β
b : α
⊢ (compl ∘ u ∘ compl) a ≤ b ↔ a ≤ (compl ∘ l ∘ compl) b
[PROOFSTEP]
dsimp
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
inst✝¹ : BooleanAlgebra α
inst✝ : BooleanAlgebra β
l : α → β
u : β → α
gc : GaloisConnection l u
a : β
b : α
⊢ (u aᶜ)ᶜ ≤ b ↔ a ≤ (l bᶜ)ᶜ
[PROOFSTEP]
rw [le_compl_iff_le_compl, gc, compl_le_iff_compl_le]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝² : CompleteLattice α
inst✝¹ : CompleteLattice β
inst✝ : CompleteLattice γ
f : α → β → γ
s : Set α
t : Set β
l u : α → β → γ
l₁ u₁ : β → γ → α
l₂ u₂ : α → γ → β
h₁ : ∀ (b : β), GaloisConnection (swap l b) (u₁ b)
h₂ : ∀ (a : α), GaloisConnection (l a) (u₂ a)
⊢ sSup (image2 l s t) = l (sSup s) (sSup t)
[PROOFSTEP]
simp_rw [sSup_image2, ← (h₂ _).l_sSup, ← (h₁ _).l_sSup]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝² : CompleteLattice α
inst✝¹ : CompleteLattice β
inst✝ : CompleteLattice γ
f : α → β → γ
s : Set α
t : Set β
l u : α → β → γ
l₁ u₁ : β → γ → α
l₂ u₂ : α → γ → β
h₁ : ∀ (b : β), GaloisConnection (l₁ b) (swap u b)
h₂ : ∀ (a : α), GaloisConnection (l₂ a) (u a)
⊢ sInf (image2 u s t) = u (sInf s) (sInf t)
[PROOFSTEP]
simp_rw [sInf_image2, ← (h₂ _).u_sInf, ← (h₁ _).u_sInf]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
s : Set β
⊢ BddAbove (↑e ⁻¹' s) ↔ BddAbove s
[PROOFSTEP]
rw [← e.bddAbove_image, e.image_preimage]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
inst✝¹ : Preorder α
inst✝ : Preorder β
e : α ≃o β
s : Set β
⊢ BddBelow (↑e ⁻¹' s) ↔ BddBelow s
[PROOFSTEP]
rw [← e.bddBelow_image, e.image_preimage]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : SemilatticeSup α
inst✝ : SemilatticeSup β
gi : GaloisInsertion l u
a b : β
⊢ l (u a) ⊔ l (u b) = a ⊔ b
[PROOFSTEP]
simp only [gi.l_u_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
p : ι → Prop
f : (i : ι) → p i → β
⊢ l (⨆ (i : ι) (hi : p i), u (f i hi)) = ⨆ (i : ι) (hi : p i), f i hi
[PROOFSTEP]
simp only [iSup_subtype', gi.l_iSup_u]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
s : Set β
⊢ l (sSup (u '' s)) = sSup s
[PROOFSTEP]
rw [sSup_image, gi.l_biSup_u, sSup_eq_iSup]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : SemilatticeInf α
inst✝ : SemilatticeInf β
gi : GaloisInsertion l u
a b : β
⊢ l (u (a ⊓ b)) = a ⊓ b
[PROOFSTEP]
simp only [gi.l_u_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
p : ι → Prop
f : (i : ι) → p i → β
⊢ l (⨅ (i : ι) (hi : p i), u (f i hi)) = ⨅ (i : ι) (hi : p i), f i hi
[PROOFSTEP]
simp only [iInf_subtype', gi.l_iInf_u]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
s : Set β
⊢ l (sInf (u '' s)) = sInf s
[PROOFSTEP]
rw [sInf_image, gi.l_biInf_u, sInf_eq_iInf]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
f : ι → α
hf : ∀ (i : ι), u (l (f i)) = f i
⊢ l (⨅ (i : ι), f i) = l (⨅ (i : ι), u (l (f i)))
[PROOFSTEP]
simp [hf]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
p : ι → Prop
f : (i : ι) → p i → α
hf : ∀ (i : ι) (hi : p i), u (l (f i hi)) = f i hi
⊢ l (⨅ (i : ι) (hi : p i), f i hi) = ⨅ (i : ι) (hi : p i), l (f i hi)
[PROOFSTEP]
rw [iInf_subtype', iInf_subtype']
[GOAL]
α : Type u
β : Type v
γ : Type w
ι✝ : Sort x
κ : ι✝ → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : CompleteLattice α
inst✝ : CompleteLattice β
gi : GaloisInsertion l u
ι : Sort x
p : ι → Prop
f : (i : ι) → p i → α
hf : ∀ (i : ι) (hi : p i), u (l (f i hi)) = f i hi
⊢ l (⨅ (x : { i // p i }), f ↑x (_ : p ↑x)) = ⨅ (x : { i // p i }), l (f ↑x (_ : p ↑x))
[PROOFSTEP]
exact gi.l_iInf_of_ul_eq_self _ fun _ => hf _ _
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : SemilatticeInf α
gi : GaloisInsertion l u
src✝ : PartialOrder β := inst✝¹
⊢ ∀ (a b : β), a ⊓ b ≤ a
[PROOFSTEP]
simp only [gi.choice_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : SemilatticeInf α
gi : GaloisInsertion l u
src✝ : PartialOrder β := inst✝¹
⊢ ∀ (a b : β), l (u a ⊓ u b) ≤ a
[PROOFSTEP]
exact fun a b => gi.gc.l_le inf_le_left
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : SemilatticeInf α
gi : GaloisInsertion l u
src✝ : PartialOrder β := inst✝¹
⊢ ∀ (a b : β), a ⊓ b ≤ b
[PROOFSTEP]
simp only [gi.choice_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : SemilatticeInf α
gi : GaloisInsertion l u
src✝ : PartialOrder β := inst✝¹
⊢ ∀ (a b : β), l (u a ⊓ u b) ≤ b
[PROOFSTEP]
exact fun a b => gi.gc.l_le inf_le_right
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : SemilatticeInf α
gi : GaloisInsertion l u
src✝ : PartialOrder β := inst✝¹
⊢ ∀ (a b c : β), a ≤ b → a ≤ c → a ≤ b ⊓ c
[PROOFSTEP]
simp only [gi.choice_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : SemilatticeInf α
gi : GaloisInsertion l u
src✝ : PartialOrder β := inst✝¹
⊢ ∀ (a b c : β), a ≤ b → a ≤ c → a ≤ l (u b ⊓ u c)
[PROOFSTEP]
exact fun a b c hac hbc =>
  (gi.le_l_u a).trans <| gi.gc.monotone_l <| le_inf (gi.gc.monotone_u hac) (gi.gc.monotone_u hbc)
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝² : PartialOrder β
inst✝¹ : Preorder α
inst✝ : OrderTop α
gi : GaloisInsertion l u
⊢ ∀ (a : β), a ≤ ⊤
[PROOFSTEP]
simp only [gi.choice_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝² : PartialOrder β
inst✝¹ : Preorder α
inst✝ : OrderTop α
gi : GaloisInsertion l u
⊢ ∀ (a : β), a ≤ l ⊤
[PROOFSTEP]
exact fun b => (gi.le_l_u b).trans (gi.gc.monotone_l le_top)
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : CompleteLattice α
gi : GaloisInsertion l u
src✝¹ : BoundedOrder β := liftBoundedOrder gi
src✝ : Lattice β := liftLattice gi
s : Set β
⊢ ∀ (a : β), a ∈ s → sInf s ≤ a
[PROOFSTEP]
dsimp
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : CompleteLattice α
gi : GaloisInsertion l u
src✝¹ : BoundedOrder β := liftBoundedOrder gi
src✝ : Lattice β := liftLattice gi
s : Set β
⊢ ∀ (a : β), a ∈ s → choice gi (sInf (u '' s)) (_ : u (l (sInf (u '' s))) ≤ sInf (u '' s)) ≤ a
[PROOFSTEP]
rw [gi.choice_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : CompleteLattice α
gi : GaloisInsertion l u
src✝¹ : BoundedOrder β := liftBoundedOrder gi
src✝ : Lattice β := liftLattice gi
s : Set β
⊢ ∀ (a : β), a ∈ s → l (sInf (u '' s)) ≤ a
[PROOFSTEP]
exact (gi.isGLB_of_u_image (isGLB_sInf _)).1
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : CompleteLattice α
gi : GaloisInsertion l u
src✝¹ : BoundedOrder β := liftBoundedOrder gi
src✝ : Lattice β := liftLattice gi
s : Set β
⊢ ∀ (a : β), (∀ (b : β), b ∈ s → a ≤ b) → a ≤ sInf s
[PROOFSTEP]
dsimp
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : CompleteLattice α
gi : GaloisInsertion l u
src✝¹ : BoundedOrder β := liftBoundedOrder gi
src✝ : Lattice β := liftLattice gi
s : Set β
⊢ ∀ (a : β), (∀ (b : β), b ∈ s → a ≤ b) → a ≤ choice gi (sInf (u '' s)) (_ : u (l (sInf (u '' s))) ≤ sInf (u '' s))
[PROOFSTEP]
rw [gi.choice_eq]
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a a₁ a₂ : α
b b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder β
inst✝ : CompleteLattice α
gi : GaloisInsertion l u
src✝¹ : BoundedOrder β := liftBoundedOrder gi
src✝ : Lattice β := liftLattice gi
s : Set β
⊢ ∀ (a : β), (∀ (b : β), b ∈ s → a ≤ b) → a ≤ l (sInf (u '' s))
[PROOFSTEP]
exact (gi.isGLB_of_u_image (isGLB_sInf _)).2
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder α
inst✝ : SemilatticeInf β
gi : GaloisCoinsertion l u
src✝ : PartialOrder α := inst✝¹
a b : α
⊢ a ⊓ b ≤ a
[PROOFSTEP]
exact (@OrderDual.semilatticeInf αᵒᵈ gi.dual.liftSemilatticeSup).inf_le_left a b
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder α
inst✝ : SemilatticeInf β
gi : GaloisCoinsertion l u
src✝ : PartialOrder α := inst✝¹
a b : α
⊢ a ⊓ b ≤ b
[PROOFSTEP]
exact (@OrderDual.semilatticeInf αᵒᵈ gi.dual.liftSemilatticeSup).inf_le_right a b
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder α
inst✝ : SemilatticeInf β
gi : GaloisCoinsertion l u
src✝ : PartialOrder α := inst✝¹
a b c : α
⊢ a ≤ b → a ≤ c → a ≤ b ⊓ c
[PROOFSTEP]
exact (@OrderDual.semilatticeInf αᵒᵈ gi.dual.liftSemilatticeSup).le_inf a b c
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder α
inst✝ : SemilatticeSup β
gi : GaloisCoinsertion l u
src✝ : PartialOrder α := inst✝¹
a b : α
⊢ a ≤ a ⊔ b
[PROOFSTEP]
exact (@OrderDual.semilatticeSup αᵒᵈ gi.dual.liftSemilatticeInf).le_sup_left a b
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder α
inst✝ : SemilatticeSup β
gi : GaloisCoinsertion l u
src✝ : PartialOrder α := inst✝¹
a b : α
⊢ b ≤ a ⊔ b
[PROOFSTEP]
exact (@OrderDual.semilatticeSup αᵒᵈ gi.dual.liftSemilatticeInf).le_sup_right a b
[GOAL]
α : Type u
β : Type v
γ : Type w
ι : Sort x
κ : ι → Sort u_1
a✝ a₁ a₂ : α
b✝ b₁ b₂ : β
l : α → β
u : β → α
inst✝¹ : PartialOrder α
inst✝ : SemilatticeSup β
gi : GaloisCoinsertion l u
src✝ : PartialOrder α := inst✝¹
a b c : α
⊢ a ≤ c → b ≤ c → a ⊔ b ≤ c
[PROOFSTEP]
exact (@OrderDual.semilatticeSup αᵒᵈ gi.dual.liftSemilatticeInf).sup_le a b c


[GOAL]
α : Type u_1
m0 : MeasurableSpace α
μ μ₁ μ₂ ν ν₁ ν₂ : Measure α
s t : Set α
hs : ↑↑μ s = 0
ht : ↑↑ν t = 0
hst : univ ⊆ s ∪ t
⊢ μ ⟂ₘ ν
[PROOFSTEP]
use toMeasurable μ s, measurableSet_toMeasurable _ _, (measure_toMeasurable _).trans hs
[GOAL]
case right
α : Type u_1
m0 : MeasurableSpace α
μ μ₁ μ₂ ν ν₁ ν₂ : Measure α
s t : Set α
hs : ↑↑μ s = 0
ht : ↑↑ν t = 0
hst : univ ⊆ s ∪ t
⊢ ↑↑ν (toMeasurable μ s)ᶜ = 0
[PROOFSTEP]
refine' measure_mono_null (fun x hx => (hst trivial).resolve_left fun hxs => hx _) ht
[GOAL]
case right
α : Type u_1
m0 : MeasurableSpace α
μ μ₁ μ₂ ν ν₁ ν₂ : Measure α
s t : Set α
hs : ↑↑μ s = 0
ht : ↑↑ν t = 0
hst : univ ⊆ s ∪ t
x : α
hx : x ∈ (toMeasurable μ s)ᶜ
hxs : x ∈ s
⊢ x ∈ toMeasurable μ s
[PROOFSTEP]
exact subset_toMeasurable _ _ hxs
[GOAL]
α : Type u_1
m0 : MeasurableSpace α
μ✝ μ₁ μ₂ ν ν₁ ν₂ : Measure α
ι : Type u_2
inst✝ : Countable ι
μ : ι → Measure α
⊢ sum μ ⟂ₘ ν ↔ ∀ (i : ι), μ i ⟂ₘ ν
[PROOFSTEP]
refine' ⟨fun h i => h.mono (le_sum _ _) le_rfl, fun H => _⟩
[GOAL]
α : Type u_1
m0 : MeasurableSpace α
μ✝ μ₁ μ₂ ν ν₁ ν₂ : Measure α
ι : Type u_2
inst✝ : Countable ι
μ : ι → Measure α
H : ∀ (i : ι), μ i ⟂ₘ ν
⊢ sum μ ⟂ₘ ν
[PROOFSTEP]
choose s hsm hsμ hsν using H
[GOAL]
α : Type u_1
m0 : MeasurableSpace α
μ✝ μ₁ μ₂ ν ν₁ ν₂ : Measure α
ι : Type u_2
inst✝ : Countable ι
μ : ι → Measure α
s : ι → Set α
hsm : ∀ (i : ι), MeasurableSet (s i)
hsμ : ∀ (i : ι), ↑↑(μ i) (s i) = 0
hsν : ∀ (i : ι), ↑↑ν (s i)ᶜ = 0
⊢ sum μ ⟂ₘ ν
[PROOFSTEP]
refine' ⟨⋂ i, s i, MeasurableSet.iInter hsm, _, _⟩
[GOAL]
case refine'_1
α : Type u_1
m0 : MeasurableSpace α
μ✝ μ₁ μ₂ ν ν₁ ν₂ : Measure α
ι : Type u_2
inst✝ : Countable ι
μ : ι → Measure α
s : ι → Set α
hsm : ∀ (i : ι), MeasurableSet (s i)
hsμ : ∀ (i : ι), ↑↑(μ i) (s i) = 0
hsν : ∀ (i : ι), ↑↑ν (s i)ᶜ = 0
⊢ ↑↑(sum μ) (⋂ (i : ι), s i) = 0
[PROOFSTEP]
rw [sum_apply _ (MeasurableSet.iInter hsm), ENNReal.tsum_eq_zero]
[GOAL]
case refine'_1
α : Type u_1
m0 : MeasurableSpace α
μ✝ μ₁ μ₂ ν ν₁ ν₂ : Measure α
ι : Type u_2
inst✝ : Countable ι
μ : ι → Measure α
s : ι → Set α
hsm : ∀ (i : ι), MeasurableSet (s i)
hsμ : ∀ (i : ι), ↑↑(μ i) (s i) = 0
hsν : ∀ (i : ι), ↑↑ν (s i)ᶜ = 0
⊢ ∀ (i : ι), ↑↑(μ i) (⋂ (b : ι), s b) = 0
[PROOFSTEP]
exact fun i => measure_mono_null (iInter_subset _ _) (hsμ i)
[GOAL]
case refine'_2
α : Type u_1
m0 : MeasurableSpace α
μ✝ μ₁ μ₂ ν ν₁ ν₂ : Measure α
ι : Type u_2
inst✝ : Countable ι
μ : ι → Measure α
s : ι → Set α
hsm : ∀ (i : ι), MeasurableSet (s i)
hsμ : ∀ (i : ι), ↑↑(μ i) (s i) = 0
hsν : ∀ (i : ι), ↑↑ν (s i)ᶜ = 0
⊢ ↑↑ν (⋂ (i : ι), s i)ᶜ = 0
[PROOFSTEP]
rwa [compl_iInter, measure_iUnion_null_iff]
[GOAL]
α : Type u_1
m0 : MeasurableSpace α
μ μ₁ μ₂ ν ν₁ ν₂ : Measure α
⊢ μ₁ + μ₂ ⟂ₘ ν ↔ μ₁ ⟂ₘ ν ∧ μ₂ ⟂ₘ ν
[PROOFSTEP]
rw [← sum_cond, sum_left, Bool.forall_bool, cond, cond, and_comm]