Theorem: EReal.le_iff_le_forall_real_gt
File: Mathlib/Data/Real/EReal.lean

tactic: symm
state_before: x y : EReal
⊢ (∀ (z : ℝ), x < ↑z → y ≤ ↑z) ↔ y ≤ x
state_after: x y : EReal
⊢ y ≤ x ↔ ∀ (z : ℝ), x < ↑z → y ≤ ↑z

tactic: refine ⟨fun h z x_lt_z ↦ le_trans h (le_of_lt x_lt_z), ?_⟩
state_before: x y : EReal
⊢ y ≤ x ↔ ∀ (z : ℝ), x < ↑z → y ≤ ↑z
state_after: x y : EReal
⊢ (∀ (z : ℝ), x < ↑z → y ≤ ↑z) → y ≤ x

tactic: intro h
state_before: x y : EReal
⊢ (∀ (z : ℝ), x < ↑z → y ≤ ↑z) → y ≤ x
state_after: x y : EReal
h : ∀ (z : ℝ), x < ↑z → y ≤ ↑z
⊢ y ≤ x

tactic: induction x
state_before: x y : EReal
h : ∀ (z : ℝ), x < ↑z → y ≤ ↑z
⊢ y ≤ x
state_after: case h_bot
y : EReal
h : ∀ (z : ℝ), ⊥ < ↑z → y ≤ ↑z
⊢ y ≤ ⊥

case h_real
y : EReal
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → y ≤ ↑z
⊢ y ≤ ↑a✝

case h_top
y : EReal
h : ∀ (z : ℝ), ⊤ < ↑z → y ≤ ↑z
⊢ y ≤ ⊤

tactic: apply le_of_eq ((eq_bot_iff_forall_lt y).2 _)
state_before: case h_bot
y : EReal
h : ∀ (z : ℝ), ⊥ < ↑z → y ≤ ↑z
⊢ y ≤ ⊥
state_after: y : EReal
h : ∀ (z : ℝ), ⊥ < ↑z → y ≤ ↑z
⊢ ∀ (y_1 : ℝ), y < ↑y_1

tactic: intro z
state_before: y : EReal
h : ∀ (z : ℝ), ⊥ < ↑z → y ≤ ↑z
⊢ ∀ (y_1 : ℝ), y < ↑y_1
state_after: y : EReal
h : ∀ (z : ℝ), ⊥ < ↑z → y ≤ ↑z
z : ℝ
⊢ y < ↑z

tactic: specialize h (z-1) (bot_lt_coe (z-1))
state_before: y : EReal
h : ∀ (z : ℝ), ⊥ < ↑z → y ≤ ↑z
z : ℝ
⊢ y < ↑z
state_after: y : EReal
z : ℝ
h : y ≤ ↑(z - 1)
⊢ y < ↑z

tactic: apply lt_of_le_of_lt h
state_before: y : EReal
z : ℝ
h : y ≤ ↑(z - 1)
⊢ y < ↑z
state_after: y : EReal
z : ℝ
h : y ≤ ↑(z - 1)
⊢ ↑(z - 1) < ↑z

tactic: rw [EReal.coe_lt_coe_iff]
state_before: y : EReal
z : ℝ
h : y ≤ ↑(z - 1)
⊢ ↑(z - 1) < ↑z
state_after: y : EReal
z : ℝ
h : y ≤ ↑(z - 1)
⊢ z - 1 < z

tactic: exact sub_one_lt z
state_before: y : EReal
z : ℝ
h : y ≤ ↑(z - 1)
⊢ z - 1 < z
state_after: no goals

tactic: induction y
state_before: case h_real
y : EReal
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → y ≤ ↑z
⊢ y ≤ ↑a✝
state_after: case h_real.h_bot
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → ⊥ ≤ ↑z
⊢ ⊥ ≤ ↑a✝

case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝¹ < ↑z → ↑a✝ ≤ ↑z
⊢ ↑a✝ ≤ ↑a✝¹

case h_real.h_top
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → ⊤ ≤ ↑z
⊢ ⊤ ≤ ↑a✝

tactic: exact bot_le
state_before: case h_real.h_bot
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → ⊥ ≤ ↑z
⊢ ⊥ ≤ ↑a✝
state_after: no goals

tactic: norm_cast
state_before: case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝¹ < ↑z → ↑a✝ ≤ ↑z
⊢ ↑a✝ ≤ ↑a✝¹
state_after: case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝¹ < ↑z → ↑a✝ ≤ ↑z
⊢ a✝ ≤ a✝¹

tactic: norm_cast at h
state_before: case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝¹ < ↑z → ↑a✝ ≤ ↑z
⊢ a✝ ≤ a✝¹
state_after: case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), a✝¹ < z → a✝ ≤ z
⊢ a✝ ≤ a✝¹

tactic: by_contra x_lt_y
state_before: case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), a✝¹ < z → a✝ ≤ z
⊢ a✝ ≤ a✝¹
state_after: case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), a✝¹ < z → a✝ ≤ z
x_lt_y : ¬a✝ ≤ a✝¹
⊢ False

tactic: rcases exists_between (lt_of_not_le x_lt_y) with ⟨z, x_lt_z, z_lt_y⟩
state_before: case h_real.h_real
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), a✝¹ < z → a✝ ≤ z
x_lt_y : ¬a✝ ≤ a✝¹
⊢ False
state_after: case h_real.h_real.intro.intro
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), a✝¹ < z → a✝ ≤ z
x_lt_y : ¬a✝ ≤ a✝¹
z : ℝ
x_lt_z : a✝¹ < z
z_lt_y : z < a✝
⊢ False

tactic: specialize h z x_lt_z
state_before: case h_real.h_real.intro.intro
a✝¹ a✝ : ℝ
h : ∀ (z : ℝ), a✝¹ < z → a✝ ≤ z
x_lt_y : ¬a✝ ≤ a✝¹
z : ℝ
x_lt_z : a✝¹ < z
z_lt_y : z < a✝
⊢ False
state_after: case h_real.h_real.intro.intro
a✝¹ a✝ : ℝ
x_lt_y : ¬a✝ ≤ a✝¹
z : ℝ
x_lt_z : a✝¹ < z
z_lt_y : z < a✝
h : a✝ ≤ z
⊢ False

tactic: exact not_le_of_lt z_lt_y h
state_before: case h_real.h_real.intro.intro
a✝¹ a✝ : ℝ
x_lt_y : ¬a✝ ≤ a✝¹
z : ℝ
x_lt_z : a✝¹ < z
z_lt_y : z < a✝
h : a✝ ≤ z
⊢ False
state_after: no goals

tactic: exfalso
state_before: case h_real.h_top
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → ⊤ ≤ ↑z
⊢ ⊤ ≤ ↑a✝
state_after: case h_real.h_top
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → ⊤ ≤ ↑z
⊢ False

tactic: specialize h (_+ 1) (EReal.coe_lt_coe_iff.2 (lt_add_one _))
state_before: case h_real.h_top
a✝ : ℝ
h : ∀ (z : ℝ), ↑a✝ < ↑z → ⊤ ≤ ↑z
⊢ False
state_after: case h_real.h_top
a✝ : ℝ
h : ⊤ ≤ ↑(a✝ + 1)
⊢ False

tactic: exact not_le_of_lt (coe_lt_top (_ + 1)) h
state_before: case h_real.h_top
a✝ : ℝ
h : ⊤ ≤ ↑(a✝ + 1)
⊢ False
state_after: no goals

tactic: exact le_top
state_before: case h_top
y : EReal
h : ∀ (z : ℝ), ⊤ < ↑z → y ≤ ↑z
⊢ y ≤ ⊤
state_after: no goals