Theorem: BoundedContinuousFunction.exists_extension_forall_exists_le_ge_of_closedEmbedding
File: Mathlib/Topology/TietzeExtension.lean

tactic: inhabit X
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: obtain ⟨a, ha⟩ : ∃ a, IsGLB (range f) a
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: exact ⟨_, isGLB_ciInf (Real.bounded_iff_bddBelow_bddAbove.1 f.bounded_range).1⟩
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
⊢ ∃ a, IsGLB (range ↑f) a

case intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: obtain ⟨b, hb⟩ : ∃ b, IsLUB (range f) b
state_before: case intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: exact ⟨_, isLUB_ciSup (Real.bounded_iff_bddBelow_bddAbove.1 f.bounded_range).2⟩
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
⊢ ∃ b, IsLUB (range ↑f) b

case intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: have hmem : ∀ x, f x ∈ Icc a b := fun x => ⟨ha.1 ⟨x, rfl⟩, hb.1 ⟨x, rfl⟩⟩
state_before: case intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: have hle : a ≤ b := (hmem default).1.trans (hmem default).2
state_before: case intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: rcases hle.eq_or_lt with (rfl | hlt)
state_before: case intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: set c := (a + b) / 2
state_before: case intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: have hac : a < c := left_lt_add_div_two.2 hlt
state_before: case intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: have hcb : c < b := add_div_two_lt_right.2 hlt
state_before: case intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: have hsub : c - a = b - c := by
  field_simp
  ring
state_before: case intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: choose xl hxl hgb using hg_mem
state_before: case intro.intro.inr.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ∃ x, ↑g y ∈ Icc (↑f x) b
hgf : ↑g ∘ e = ↑f
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: rcases em (∃ x, f x = b) with (⟨x, rfl⟩ | hb')
state_before: case intro.intro.inr.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: rcases exists_bounded_mem_Icc_of_closed_of_le
    (he.closed_range.union <| isClosed_Iic.preimage g.continuous)
    (isClosed_singleton.preimage g.continuous) hd (sub_nonneg.2 hcb.le) with
  ⟨dg, dg0, dgb, dgmem⟩
state_before: case intro.intro.inr.intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: replace hgf : ∀ x, (g - dg) (e x) = f x
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: refine' ⟨g - dg, fun y => _, funext hgf⟩
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: have : ∀ x, f x = a := by simpa using hmem
state_before: case intro.intro.inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
hb : IsLUB (range ↑f) a
hmem : ∀ (x : X), ↑f x ∈ Icc a a
hle : a ≤ a
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: use const Y a
state_before: case intro.intro.inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
hb : IsLUB (range ↑f) a
hmem : ∀ (x : X), ↑f x ∈ Icc a a
hle : a ≤ a
this : ∀ (x : X), ↑f x = a
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: simp [this, Function.funext_iff]
state_before: case intro.intro.inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
hb : IsLUB (range ↑f) a
hmem : ∀ (x : X), ↑f x ∈ Icc a a
hle : a ≤ a
this : ∀ (x : X), ↑f x = a
⊢ (∀ (y : Y), ∃ x₁ x₂, ↑(const Y a) y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑(const Y a) ∘ e = ↑f

tactic: simpa using hmem
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
hb : IsLUB (range ↑f) a
hmem : ∀ (x : X), ↑f x ∈ Icc a a
hle : a ≤ a
⊢ ∀ (x : X), ↑f x = a

tactic: field_simp
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
⊢ c - a = b - c

tactic: ring
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
⊢ a + b - 2 * a = b * 2 - (a + b)

tactic: rcases exists_extension_forall_mem_Icc_of_closedEmbedding f hmem hle he with ⟨g, hg_mem, hgf⟩
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
⊢ ∃ g, (∀ (y : Y), ∃ x, ↑g y ∈ Icc (↑f x) b) ∧ ↑g ∘ e = ↑f

tactic: rcases em (∃ x, f x = a) with (⟨x, rfl⟩ | ha')
state_before: case intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
⊢ ∃ g, (∀ (y : Y), ∃ x, ↑g y ∈ Icc (↑f x) b) ∧ ↑g ∘ e = ↑f

tactic: rcases exists_bounded_mem_Icc_of_closed_of_le
    (he.closed_range.union <| isClosed_Ici.preimage g.continuous)
    (isClosed_singleton.preimage g.continuous) hd (sub_nonneg.2 hac.le) with
  ⟨dg, dg0, dga, dgmem⟩
state_before: case intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
⊢ ∃ g, (∀ (y : Y), ∃ x, ↑g y ∈ Icc (↑f x) b) ∧ ↑g ∘ e = ↑f

tactic: replace hgf : ∀ x, (g + dg) (e x) = f x
state_before: case intro.intro.inr.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
⊢ ∃ g, (∀ (y : Y), ∃ x, ↑g y ∈ Icc (↑f x) b) ∧ ↑g ∘ e = ↑f

tactic: refine' ⟨g + dg, fun y => _, funext hgf⟩
state_before: case intro.intro.inr.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
⊢ ∃ g, (∀ (y : Y), ∃ x, ↑g y ∈ Icc (↑f x) b) ∧ ↑g ∘ e = ↑f

tactic: exact ⟨g, fun y => ⟨x, hg_mem _⟩, hgf⟩
state_before: case intro.intro.inl.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
b : ℝ
hb : IsLUB (range ↑f) b
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
x : X
ha : IsGLB (range ↑f) (↑f x)
hmem : ∀ (x_1 : X), ↑f x_1 ∈ Icc (↑f x) b
hle : ↑f x ≤ b
hlt : ↑f x < b
c : ℝ := (↑f x + b) / 2
hac : ↑f x < c
hcb : c < b
hsub : c - ↑f x = b - c
hg_mem : ∀ (y : Y), ↑g y ∈ Icc (↑f x) b
⊢ ∃ g, (∀ (y : Y), ∃ x, ↑g y ∈ Icc (↑f x) b) ∧ ↑g ∘ e = ↑f

tactic: refine' disjoint_union_left.2 ⟨_, Disjoint.preimage _ _⟩
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
⊢ Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})

tactic: rw [Set.disjoint_left]
state_before: case refine'_1
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
⊢ Disjoint (range e) (↑g ⁻¹' {a})

tactic: rintro _ ⟨x, rfl⟩ (rfl : g (e x) = a)
state_before: case refine'_1
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
⊢ ∀ ⦃a_1 : Y⦄, a_1 ∈ range e → ¬a_1 ∈ ↑g ⁻¹' {a}

tactic: exact ha' ⟨x, (congr_fun hgf x).symm⟩
state_before: case refine'_1.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
b : ℝ
hb : IsLUB (range ↑f) b
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
x : X
ha : IsGLB (range ↑f) (↑g (e x))
hmem : ∀ (x_1 : X), ↑f x_1 ∈ Icc (↑g (e x)) b
hle : ↑g (e x) ≤ b
hlt : ↑g (e x) < b
c : ℝ := (↑g (e x) + b) / 2
hac : ↑g (e x) < c
hcb : c < b
hsub : c - ↑g (e x) = b - c
hg_mem : ∀ (y : Y), ↑g y ∈ Icc (↑g (e x)) b
ha' : ¬∃ x_1, ↑f x_1 = ↑g (e x)
⊢ False

tactic: exact Set.disjoint_singleton_right.2 hac.not_le
state_before: case refine'_2
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
⊢ Disjoint (Ici c) {a}

tactic: intro x
state_before: case hgf
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
⊢ ∀ (x : X), ↑(g + dg) (e x) = ↑f x

tactic: simp [dg0 (Or.inl <| mem_range_self _), ← hgf]
state_before: case hgf
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
hgf : ↑g ∘ e = ↑f
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
x : X
⊢ ↑(g + dg) (e x) = ↑f x

tactic: rcases ha.exists_between hay with ⟨_, ⟨x, rfl⟩, _, hxy⟩
state_before: case intro.intro.inr.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
hay : a < ↑(g + dg) y
⊢ ∃ x, ↑(g + dg) y ∈ Icc (↑f x) b

tactic: refine' ⟨x, hxy.le, _⟩
state_before: case intro.intro.inr.intro.intro.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
hay : a < ↑(g + dg) y
x : X
left✝ : a ≤ ↑f x
hxy : ↑f x < ↑(g + dg) y
⊢ ∃ x, ↑(g + dg) y ∈ Icc (↑f x) b

tactic: cases' le_total c (g y) with hc hc
state_before: case intro.intro.inr.intro.intro.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
hay : a < ↑(g + dg) y
x : X
left✝ : a ≤ ↑f x
hxy : ↑f x < ↑(g + dg) y
⊢ ↑(g + dg) y ≤ b

tactic: rcases(hg_mem y).1.eq_or_lt with (rfl | hlt)
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
⊢ a < ↑(g + dg) y

tactic: refine' (lt_add_iff_pos_right _).2 _
state_before: case inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
b : ℝ
hb : IsLUB (range ↑f) b
g dg : Y →ᵇ ℝ
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
ha : IsGLB (range ↑f) (↑g y)
hmem : ∀ (x : X), ↑f x ∈ Icc (↑g y) b
hle : ↑g y ≤ b
hlt : ↑g y < b
c : ℝ := (↑g y + b) / 2
hac : ↑g y < c
hcb : c < b
hsub : c - ↑g y = b - c
hg_mem : ∀ (y_1 : Y), ↑g y_1 ∈ Icc (↑g y) b
ha' : ¬∃ x, ↑f x = ↑g y
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {↑g y})
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - ↑g y)) (↑g ⁻¹' {↑g y})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - ↑g y)
⊢ ↑g y < ↑(g + dg) y

tactic: calc
  0 < c - g y := sub_pos.2 hac
  _ = dg y := (dga rfl).symm
state_before: case inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
b : ℝ
hb : IsLUB (range ↑f) b
g dg : Y →ᵇ ℝ
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
ha : IsGLB (range ↑f) (↑g y)
hmem : ∀ (x : X), ↑f x ∈ Icc (↑g y) b
hle : ↑g y ≤ b
hlt : ↑g y < b
c : ℝ := (↑g y + b) / 2
hac : ↑g y < c
hcb : c < b
hsub : c - ↑g y = b - c
hg_mem : ∀ (y_1 : Y), ↑g y_1 ∈ Icc (↑g y) b
ha' : ¬∃ x, ↑f x = ↑g y
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {↑g y})
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - ↑g y)) (↑g ⁻¹' {↑g y})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - ↑g y)
⊢ 0 < ↑dg.toContinuousMap y

tactic: exact hlt.trans_le ((le_add_iff_nonneg_right _).2 <| (dgmem y).1)
state_before: case inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt✝ : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
hlt : a < ↑g y
⊢ a < ↑(g + dg) y

tactic: simp [dg0 (Or.inr hc), (hg_mem y).2]
state_before: case intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
hay : a < ↑(g + dg) y
x : X
left✝ : a ≤ ↑f x
hxy : ↑f x < ↑(g + dg) y
hc : c ≤ ↑g y
⊢ ↑(g + dg) y ≤ b

tactic: calc
  g y + dg y ≤ c + (c - a) := add_le_add hc (dgmem _).2
  _ = b := by rw [hsub, add_sub_cancel'_right]
state_before: case intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
hay : a < ↑(g + dg) y
x : X
left✝ : a ≤ ↑f x
hxy : ↑f x < ↑(g + dg) y
hc : ↑g y ≤ c
⊢ ↑(g + dg) y ≤ b

tactic: rw [hsub, add_sub_cancel'_right]
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hg_mem : ∀ (y : Y), ↑g y ∈ Icc a b
ha' : ¬∃ x, ↑f x = a
hd : Disjoint (range e ∪ ↑g ⁻¹' Ici c) (↑g ⁻¹' {a})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Ici c)
dga : EqOn (↑dg) (Function.const Y (c - a)) (↑g ⁻¹' {a})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (c - a)
hgf : ∀ (x : X), ↑(g + dg) (e x) = ↑f x
y : Y
hay : a < ↑(g + dg) y
x : X
left✝ : a ≤ ↑f x
hxy : ↑f x < ↑(g + dg) y
hc : ↑g y ≤ c
⊢ c + (c - a) = b

tactic: exact ⟨g, fun y => ⟨xl y, x, hxl y, hgb y⟩, hgf⟩
state_before: case intro.intro.inr.intro.intro.inl.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
x : X
hb : IsLUB (range ↑f) (↑f x)
hmem : ∀ (x_1 : X), ↑f x_1 ∈ Icc a (↑f x)
hle : a ≤ ↑f x
hlt : a < ↑f x
c : ℝ := (a + ↑f x) / 2
hac : a < c
hcb : c < ↑f x
hsub : c - a = ↑f x - c
hgb : ∀ (y : Y), ↑g y ≤ ↑f x
⊢ ∃ g, (∀ (y : Y), ∃ x₁ x₂, ↑g y ∈ Icc (↑f x₁) (↑f x₂)) ∧ ↑g ∘ e = ↑f

tactic: refine' disjoint_union_left.2 ⟨_, Disjoint.preimage _ _⟩
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
⊢ Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})

tactic: rw [Set.disjoint_left]
state_before: case refine'_1
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
⊢ Disjoint (range e) (↑g ⁻¹' {b})

tactic: rintro _ ⟨x, rfl⟩ (rfl : g (e x) = b)
state_before: case refine'_1
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
⊢ ∀ ⦃a : Y⦄, a ∈ range e → ¬a ∈ ↑g ⁻¹' {b}

tactic: exact hb' ⟨x, (congr_fun hgf x).symm⟩
state_before: case refine'_1.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
x : X
hb : IsLUB (range ↑f) (↑g (e x))
hmem : ∀ (x_1 : X), ↑f x_1 ∈ Icc a (↑g (e x))
hle : a ≤ ↑g (e x)
hlt : a < ↑g (e x)
c : ℝ := (a + ↑g (e x)) / 2
hac : a < c
hcb : c < ↑g (e x)
hsub : c - a = ↑g (e x) - c
hgb : ∀ (y : Y), ↑g y ≤ ↑g (e x)
hb' : ¬∃ x_1, ↑f x_1 = ↑g (e x)
⊢ False

tactic: exact Set.disjoint_singleton_right.2 hcb.not_le
state_before: case refine'_2
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
⊢ Disjoint (Iic c) {b}

tactic: intro x
state_before: case hgf
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
⊢ ∀ (x : X), ↑(g - dg) (e x) = ↑f x

tactic: simp [dg0 (Or.inl <| mem_range_self _), ← hgf]
state_before: case hgf
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
hgf : ↑g ∘ e = ↑f
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
x : X
⊢ ↑(g - dg) (e x) = ↑f x

tactic: rcases hb.exists_between hyb with ⟨_, ⟨xu, rfl⟩, hyxu, _⟩
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: cases' lt_or_le c (g y) with hc hc
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: rcases(hgb y).eq_or_lt with (rfl | hlt)
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
⊢ ↑(g - dg) y < b

tactic: refine' (sub_lt_self_iff _).2 _
state_before: case inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
dg : Y →ᵇ ℝ
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hb : IsLUB (range ↑f) (↑g y)
hmem : ∀ (x : X), ↑f x ∈ Icc a (↑g y)
hle : a ≤ ↑g y
hlt : a < ↑g y
c : ℝ := (a + ↑g y) / 2
hac : a < c
hcb : c < ↑g y
hsub : c - a = ↑g y - c
hgb : ∀ (y_1 : Y), ↑g y_1 ≤ ↑g y
hb' : ¬∃ x, ↑f x = ↑g y
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {↑g y})
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (↑g y - c)) (↑g ⁻¹' {↑g y})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (↑g y - c)
⊢ ↑(g - dg) y < ↑g y

tactic: calc
  0 < g y - c := sub_pos.2 hcb
  _ = dg y := (dgb rfl).symm
state_before: case inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
dg : Y →ᵇ ℝ
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hb : IsLUB (range ↑f) (↑g y)
hmem : ∀ (x : X), ↑f x ∈ Icc a (↑g y)
hle : a ≤ ↑g y
hlt : a < ↑g y
c : ℝ := (a + ↑g y) / 2
hac : a < c
hcb : c < ↑g y
hsub : c - a = ↑g y - c
hgb : ∀ (y_1 : Y), ↑g y_1 ≤ ↑g y
hb' : ¬∃ x, ↑f x = ↑g y
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {↑g y})
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (↑g y - c)) (↑g ⁻¹' {↑g y})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (↑g y - c)
⊢ 0 < ↑dg y

tactic: exact ((sub_le_self_iff _).2 (dgmem _).1).trans_lt hlt
state_before: case inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt✝ : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hlt : ↑g y < b
⊢ ↑(g - dg) y < b

tactic: rcases em (a ∈ range f) with (⟨x, rfl⟩ | _)
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inl
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : c < ↑g y
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: refine' ⟨x, xu, _, hyxu.le⟩
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inl.inl.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
b : ℝ
hb : IsLUB (range ↑f) b
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
dg : Y →ᵇ ℝ
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
x : X
ha : IsGLB (range ↑f) (↑f x)
hmem : ∀ (x_1 : X), ↑f x_1 ∈ Icc (↑f x) b
hle : ↑f x ≤ b
hlt : ↑f x < b
c : ℝ := (↑f x + b) / 2
hac : ↑f x < c
hcb : c < b
hsub : c - ↑f x = b - c
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hc : c < ↑g y
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: calc
  f x = c - (b - c) := by rw [← hsub, sub_sub_cancel]
  _ ≤ g y - dg y := sub_le_sub hc.le (dgmem _).2
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inl.inl.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
b : ℝ
hb : IsLUB (range ↑f) b
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
dg : Y →ᵇ ℝ
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
x : X
ha : IsGLB (range ↑f) (↑f x)
hmem : ∀ (x_1 : X), ↑f x_1 ∈ Icc (↑f x) b
hle : ↑f x ≤ b
hlt : ↑f x < b
c : ℝ := (↑f x + b) / 2
hac : ↑f x < c
hcb : c < b
hsub : c - ↑f x = b - c
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hc : c < ↑g y
⊢ ↑f x ≤ ↑(g - dg) y

tactic: rw [← hsub, sub_sub_cancel]
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
b : ℝ
hb : IsLUB (range ↑f) b
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
dg : Y →ᵇ ℝ
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
x : X
ha : IsGLB (range ↑f) (↑f x)
hmem : ∀ (x_1 : X), ↑f x_1 ∈ Icc (↑f x) b
hle : ↑f x ≤ b
hlt : ↑f x < b
c : ℝ := (↑f x + b) / 2
hac : ↑f x < c
hcb : c < b
hsub : c - ↑f x = b - c
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hc : c < ↑g y
⊢ ↑f x = c - (b - c)

tactic: have hay : a < (g - dg) y := by
  calc
    a = c - (b - c) := by rw [← hsub, sub_sub_cancel]
    _ < g y - (b - c) := (sub_lt_sub_right hc _)
    _ ≤ g y - dg y := sub_le_sub_left (dgmem _).2 _
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inl.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : c < ↑g y
h✝ : ¬a ∈ range ↑f
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: rcases ha.exists_between hay with ⟨_, ⟨x, rfl⟩, _, hxy⟩
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inl.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : c < ↑g y
h✝ : ¬a ∈ range ↑f
hay : a < ↑(g - dg) y
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: exact ⟨x, xu, hxy.le, hyxu.le⟩
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inl.inr.intro.intro.intro.intro
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : c < ↑g y
h✝ : ¬a ∈ range ↑f
hay : a < ↑(g - dg) y
x : X
left✝ : a ≤ ↑f x
hxy : ↑f x < ↑(g - dg) y
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: calc
  a = c - (b - c) := by rw [← hsub, sub_sub_cancel]
  _ < g y - (b - c) := (sub_lt_sub_right hc _)
  _ ≤ g y - dg y := sub_le_sub_left (dgmem _).2 _
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : c < ↑g y
h✝ : ¬a ∈ range ↑f
⊢ a < ↑(g - dg) y

tactic: rw [← hsub, sub_sub_cancel]
state_before: X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : c < ↑g y
h✝ : ¬a ∈ range ↑f
⊢ a = c - (b - c)

tactic: refine' ⟨xl y, xu, _, hyxu.le⟩
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : ↑g y ≤ c
⊢ ∃ x₁ x₂, ↑(g - dg) y ∈ Icc (↑f x₁) (↑f x₂)

tactic: simp [dg0 (Or.inr hc), hxl]
state_before: case intro.intro.inr.intro.intro.inr.intro.intro.intro.intro.intro.intro.intro.inr
X : Type u_1
Y : Type u_2
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : NormalSpace Y
inst✝ : Nonempty X
f : X →ᵇ ℝ
e : X → Y
he : ClosedEmbedding e
inhabited_h : Inhabited X
a : ℝ
ha : IsGLB (range ↑f) a
b : ℝ
hb : IsLUB (range ↑f) b
hmem : ∀ (x : X), ↑f x ∈ Icc a b
hle : a ≤ b
hlt : a < b
c : ℝ := (a + b) / 2
hac : a < c
hcb : c < b
hsub : c - a = b - c
g : Y →ᵇ ℝ
xl : Y → X
hxl : ∀ (y : Y), ↑f (xl y) ≤ ↑g y
hgb : ∀ (y : Y), ↑g y ≤ b
hb' : ¬∃ x, ↑f x = b
hd : Disjoint (range e ∪ ↑g ⁻¹' Iic c) (↑g ⁻¹' {b})
dg : Y →ᵇ ℝ
dg0 : EqOn (↑dg) (Function.const Y 0) (range e ∪ ↑g ⁻¹' Iic c)
dgb : EqOn (↑dg) (Function.const Y (b - c)) (↑g ⁻¹' {b})
dgmem : ∀ (x : Y), ↑dg x ∈ Icc 0 (b - c)
hgf : ∀ (x : X), ↑(g - dg) (e x) = ↑f x
y : Y
hyb : ↑(g - dg) y < b
xu : X
hyxu : ↑(g - dg) y < ↑f xu
right✝ : ↑f xu ≤ b
hc : ↑g y ≤ c
⊢ ↑f (xl y) ≤ ↑(g - dg) y