Theorem: ENNReal.exists_upcrossings_of_not_bounded_under
File: Mathlib/Topology/Instances/ENNReal.lean

tactic: rw [isBoundedUnder_le_abs, not_and_or] at hbdd
state_before: α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => abs (x i)
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: obtain hbdd | hbdd := hbdd
state_before: α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : (¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i) ∨ ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: obtain ⟨R, hR⟩ := exists_frequently_lt_of_liminf_ne_top hf
state_before: case inl
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: obtain ⟨q, hq⟩ := exists_rat_gt R
state_before: case inl.intro
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: refine' ⟨q, q + 1, (lt_add_iff_pos_right _).2 zero_lt_one, _, _⟩
state_before: case inl.intro.intro
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: refine' fun hcon => hR _
state_before: case inl.intro.intro.refine'_1
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
⊢ ∃ᶠ (i : ι) in l, x i < ↑q

tactic: filter_upwards [hcon]with x hx using not_lt.2 (lt_of_lt_of_le hq (not_lt.1 hx)).le
state_before: case inl.intro.intro.refine'_1
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => x i < ↑q) x_1
⊢ ∀ᶠ (x_1 : ι) in l, ¬(fun n => x n < R) x_1

tactic: simp only [IsBoundedUnder, IsBounded, eventually_map, eventually_atTop, ge_iff_le,
  not_exists, not_forall, not_le, exists_prop] at hbdd
state_before: case inl.intro.intro.refine'_2
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
⊢ ∃ᶠ (i : ι) in l, ↑(q + 1) < x i

tactic: refine' fun hcon => hbdd ↑(q + 1) _
state_before: case inl.intro.intro.refine'_2
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x a ≤ x_1
⊢ ∃ᶠ (i : ι) in l, ↑(q + 1) < x i

tactic: filter_upwards [hcon]with x hx using not_lt.1 hx
state_before: case inl.intro.intro.refine'_2
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, x n < R
q : ℚ
hq : R < ↑q
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x a ≤ x_1
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => ↑(q + 1) < x i) x_1
⊢ ∀ᶠ (a : ι) in l, x a ≤ ↑(q + 1)

tactic: obtain ⟨R, hR⟩ := exists_frequently_lt_of_liminf_ne_top' hf
state_before: case inr
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: obtain ⟨q, hq⟩ := exists_rat_lt R
state_before: case inr.intro
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: refine' ⟨q - 1, q, (sub_lt_self_iff _).2 zero_lt_one, _, _⟩
state_before: case inr.intro.intro
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
⊢ ∃ a b, a < b ∧ (∃ᶠ (i : ι) in l, x i < ↑a) ∧ ∃ᶠ (i : ι) in l, ↑b < x i

tactic: simp only [IsBoundedUnder, IsBounded, eventually_map, eventually_atTop, ge_iff_le,
  not_exists, not_forall, not_le, exists_prop] at hbdd
state_before: case inr.intro.intro.refine'_1
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
⊢ ∃ᶠ (i : ι) in l, x i < ↑(q - 1)

tactic: refine' fun hcon => hbdd ↑(q - 1) _
state_before: case inr.intro.intro.refine'_1
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x_1 ≤ x a
⊢ ∃ᶠ (i : ι) in l, x i < ↑(q - 1)

tactic: filter_upwards [hcon]with x hx using not_lt.1 hx
state_before: case inr.intro.intro.refine'_1
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
hbdd : ∀ (x_1 : ℝ), ¬∀ᶠ (a : ι) in l, x_1 ≤ x a
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => x i < ↑(q - 1)) x_1
⊢ ∀ᶠ (a : ι) in l, ↑(q - 1) ≤ x a

tactic: refine' fun hcon => hR _
state_before: case inr.intro.intro.refine'_2
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
⊢ ∃ᶠ (i : ι) in l, ↑q < x i

tactic: filter_upwards [hcon]with x hx using not_lt.2 ((not_lt.1 hx).trans hq.le)
state_before: case inr.intro.intro.refine'_2
α : Type ?u.206583
β : Type ?u.206586
γ : Type ?u.206589
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
x✝ y z ε ε₁ ε₂ : ℝ≥0∞
s : Set ℝ≥0∞
ι : Type u_1
l : Filter ι
x : ι → ℝ
hf : liminf (fun i => ↑(↑Real.nnabs (x i))) l ≠ ⊤
hbdd : ¬IsBoundedUnder (fun x x_1 => x ≥ x_1) l fun i => x i
R : ℝ
hR : ∃ᶠ (n : ι) in l, R < x n
q : ℚ
hq : ↑q < R
hcon : ∀ᶠ (x_1 : ι) in l, ¬(fun i => ↑q < x i) x_1
⊢ ∀ᶠ (x_1 : ι) in l, ¬(fun n => R < x n) x_1