Theorem: ENNReal.trichotomy₂
File: Mathlib/Data/ENNReal/Real.lean

Proof steps:
state_before: a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
⊢ p = 0 ∧ q = 0 ∨
    p = 0 ∧ q = ⊤ ∨
      p = 0 ∧ 0 < q.toReal ∨ p = ⊤ ∧ q = ⊤ ∨ 0 < p.toReal ∧ q = ⊤ ∨ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
state_after: case inl
a b c d : ℝ≥0∞
r p q✝ : ℝ≥0
q : ℝ≥0∞
hpq : 0 ≤ q
⊢ 0 = 0 ∧ q = 0 ∨
    0 = 0 ∧ q = ⊤ ∨
      0 = 0 ∧ 0 < q.toReal ∨
        0 = ⊤ ∧ q = ⊤ ∨ 0 < ENNReal.toReal 0 ∧ q = ⊤ ∨ 0 < ENNReal.toReal 0 ∧ 0 < q.toReal ∧ ENNReal.toReal 0 ≤ q.toReal

case inr
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
⊢ p = 0 ∧ q = 0 ∨
    p = 0 ∧ q = ⊤ ∨
      p = 0 ∧ 0 < q.toReal ∨ p = ⊤ ∧ q = ⊤ ∨ 0 < p.toReal ∧ q = ⊤ ∨ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
tactic: rcases eq_or_lt_of_le (bot_le : 0 ≤ p) with ((rfl : 0 = p) | (hp : 0 < p))
state_before: case inr
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
⊢ p = 0 ∧ q = 0 ∨
    p = 0 ∧ q = ⊤ ∨
      p = 0 ∧ 0 < q.toReal ∨ p = ⊤ ∧ q = ⊤ ∨ 0 < p.toReal ∧ q = ⊤ ∨ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
state_after: case inr.inl
a b c d : ℝ≥0∞
r p✝ q : ℝ≥0
p : ℝ≥0∞
hp : 0 < p
hpq : p ≤ ⊤
⊢ p = 0 ∧ ⊤ = 0 ∨
    p = 0 ∧ ⊤ = ⊤ ∨
      p = 0 ∧ 0 < ⊤.toReal ∨ p = ⊤ ∧ ⊤ = ⊤ ∨ 0 < p.toReal ∧ ⊤ = ⊤ ∨ 0 < p.toReal ∧ 0 < ⊤.toReal ∧ p.toReal ≤ ⊤.toReal

case inr.inr
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
⊢ p = 0 ∧ q = 0 ∨
    p = 0 ∧ q = ⊤ ∨
      p = 0 ∧ 0 < q.toReal ∨ p = ⊤ ∧ q = ⊤ ∨ 0 < p.toReal ∧ q = ⊤ ∨ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
tactic: rcases eq_or_lt_of_le (le_top : q ≤ ∞) with (rfl | hq)
state_before: case inr.inr
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
⊢ p = 0 ∧ q = 0 ∨
    p = 0 ∧ q = ⊤ ∨
      p = 0 ∧ 0 < q.toReal ∨ p = ⊤ ∧ q = ⊤ ∨ 0 < p.toReal ∧ q = ⊤ ∨ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
state_after: case inr.inr.h.h.h.h.h
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
⊢ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
tactic: repeat' right
state_before: case inr.inr.h.h.h.h.h
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
⊢ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
state_after: case inr.inr.h.h.h.h.h
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
hq' : 0 < q
⊢ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
tactic: have hq' : 0 < q := lt_of_lt_of_le hp hpq
state_before: case inr.inr.h.h.h.h.h
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
hq' : 0 < q
⊢ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
state_after: case inr.inr.h.h.h.h.h
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
hq' : 0 < q
hp' : p < ⊤
⊢ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
tactic: have hp' : p < ∞ := lt_of_le_of_lt hpq hq
state_before: case inr.inr.h.h.h.h.h
a b c d : ℝ≥0∞
r p✝ q✝ : ℝ≥0
p q : ℝ≥0∞
hpq : p ≤ q
hp : 0 < p
hq : q < ⊤
hq' : 0 < q
hp' : p < ⊤
⊢ 0 < p.toReal ∧ 0 < q.toReal ∧ p.toReal ≤ q.toReal
state_after: no goals
tactic: simp [ENNReal.toReal_le_toReal hp'.ne hq.ne, ENNReal.toReal_pos_iff, hpq, hp, hp', hq', hq]