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_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: case inl.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a

case inr
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ¬∃ y ∈ s, ∃ x, f y < x
⊢ ∃ a₀ ∈ s, ∀ 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_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: case inl.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | ¬x ≤ f y}.Finite
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a

tactic: simp only [not_le] at this
state_before: case inl.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | ¬x ≤ f y}.Finite
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: case inl.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | f y < x}.Finite
⊢ ∃ a₀ ∈ s, ∀ 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_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | f y < x}.Finite
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: case inl.intro.intro.intro.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | f y < x}.Finite
a₀ : α
others_bigger : ∀ b ∈ {y | f y < x} ∩ s, f a₀ ≤ f b
ha₀ : f a₀ < x
ha₀s : a₀ ∈ s
⊢ ∃ a₀ ∈ s, ∀ 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_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | f y < x}.Finite
a₀ : α
others_bigger : ∀ b ∈ {y | f y < x} ∩ s, f a₀ ≤ f b
ha₀ : f a₀ < x
ha₀s : a₀ ∈ s
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: case inl.intro.intro.intro.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | f y < x}.Finite
a₀ : α
others_bigger : ∀ 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: exact fun h => others_bigger a ⟨h, has⟩
state_before: case inl.intro.intro.intro.intro.intro.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
y : α
hys : y ∈ s
x : β
hx : f y < x
this : {y | f y < x}.Finite
a₀ : α
others_bigger : ∀ 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
state_after: no goals

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

tactic: obtain ⟨a₀, ha₀s⟩ := hs
state_before: case inr
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
hs : s.Nonempty
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ∀ y ∈ s, ∀ (x : β), x ≤ f y
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: case inr.intro
ι : Type u_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ∀ y ∈ s, ∀ (x : β), x ≤ f y
a₀ : α
ha₀s : a₀ ∈ s
⊢ ∃ a₀ ∈ s, ∀ 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_1
α✝ : Type u_2
β✝ : Type u_3
l : Filter α✝
α : Type u_4
β : Type u_5
inst✝ : LinearOrder β
s : Set α
f : α → β
hf : Tendsto f cofinite atTop
not_all_top : ∀ y ∈ s, ∀ (x : β), x ≤ f y
a₀ : α
ha₀s : a₀ ∈ s
⊢ ∃ a₀ ∈ s, ∀ a ∈ s, f a₀ ≤ f a
state_after: no goals