Theorem: countable_image_lt_image_Ioi
File: Mathlib/Topology/Order/Basic.lean

Proof steps:
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
state_after: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
tactic: nontriviality β
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
state_after: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
tactic: have : Nonempty α := Nonempty.map f (by infer_instance)
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
state_after: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
tactic: let s := {x | ∃ z, f x < z ∧ ∀ y, x < y → z ≤ f y}
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
state_after: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this✝ : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
this : ∀ x ∈ s, ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
tactic: have : ∀ x, x ∈ s → ∃ z, f x < z ∧ ∀ y, x < y → z ≤ f y := fun x hx ↦ hx
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this✝ : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
this : ∀ x ∈ s, ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
state_after: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
z : β → α
hz : ∀ x ∈ s, f x < z x ∧ ∀ (y : β), x < y → z x ≤ f y
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
tactic: choose! z hz using this
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
z : β → α
hz : ∀ x ∈ s, f x < z x ∧ ∀ (y : β), x < y → z x ≤ f y
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
state_after: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
z : β → α
hz : ∀ x ∈ s, f x < z x ∧ ∀ (y : β), x < y → z x ≤ f y
I : InjOn f s
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
tactic: have I : InjOn f s := by
    apply StrictMonoOn.injOn
    intro x hx y _ hxy
    calc
      f x < z x := (hz x hx).1
      _ ≤ f y := (hz x hx).2 y hxy
state_before: α : Type u
β : Type v
γ : Type w
inst✝⁴ : TopologicalSpace α
inst✝³ : LinearOrder α
inst✝² : OrderTopology α
inst✝¹ : LinearOrder β
f : β → α
inst✝ : SecondCountableTopology α
a✝ : Nontrivial β
this : Nonempty α
s : Set β := {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}
z : β → α
hz : ∀ x ∈ s, f x < z x ∧ ∀ (y : β), x < y → z x ≤ f y
I : InjOn f s
fs_count : (f '' s).Countable
⊢ {x | ∃ z, f x < z ∧ ∀ (y : β), x < y → z ≤ f y}.Countable
state_after: no goals
tactic: exact MapsTo.countable_of_injOn (mapsTo_image f s) I fs_count