Theorem: Filter.Tendsto.exists_within_forall_le
File: Mathlib/Order/Filter/Cofinite.lean

tactic: rcases em (∃ y ∈ s, ∃ x, f y < x) with (⟨y, hys, x, hx⟩ | not_all_top)
state_before: ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a

tactic: have : { y | ¬x ≤ f y }.Finite := Filter.eventually_cofinite.mp (tendsto_atTop.1 hf x)
state_before: case inl.intro.intro.intro
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a

tactic: simp only [not_le] at this
state_before: case inl.intro.intro.intro
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : Set.Finite {y | ¬x ≤ f y}
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a

tactic: obtain ⟨a₀, ⟨ha₀ : f a₀ < x, ha₀s⟩, others_bigger⟩ :=
  exists_min_image _ f (this.inter_of_left s) ⟨y, hx, hys⟩
state_before: case inl.intro.intro.intro
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : Set.Finite {y | f y < x}
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a

tactic: refine' ⟨a₀, ha₀s, fun a has => (lt_or_le (f a) x).elim _ (le_trans ha₀.le)⟩
state_before: case inl.intro.intro.intro.intro.intro.intro
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : Set.Finite {y | f y < x}
a₀ : α
others_bigger : ∀ (b : α), b ∈ {y | f y < x} ∩ s → f a₀ ≤ f b
ha₀ : f a₀ < x
ha₀s : a₀ ∈ s
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a

tactic: exact fun h => others_bigger a ⟨h, has⟩
state_before: case inl.intro.intro.intro.intro.intro.intro
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : Set.Finite {y | f y < x}
a₀ : α
others_bigger : ∀ (b : α), b ∈ {y | f y < x} ∩ s → f a₀ ≤ f b
ha₀ : f a₀ < x
ha₀s : a₀ ∈ s
a : α
has : a ∈ s
⊢ f a < x → f a₀ ≤ f a

tactic: push_neg  at not_all_top
state_before: case inr
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ¬∃ y, y ∈ s ∧ ∃ x, f y < x
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a

tactic: obtain ⟨a₀, ha₀s⟩ := hs
state_before: case inr
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
hs : Set.Nonempty s
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ∀ (y : α), y ∈ s → ∀ (x : β), x ≤ f y
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a

tactic: exact ⟨a₀, ha₀s, fun a ha => not_all_top a ha (f a₀)⟩
state_before: case inr.intro
ι : Type ?u.7143
α✝ : Type ?u.7146
β✝ : Type ?u.7149
l : Filter α✝
α : Type u_1
β : Type u_2
inst✝ : LinearOrder β
s : Set α
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ∀ (y : α), y ∈ s → ∀ (x : β), x ≤ f y
a₀ : α
ha₀s : a₀ ∈ s
⊢ ∃ a₀, a₀ ∈ s ∧ ∀ (a : α), a ∈ s → f a₀ ≤ f a