l3lab/ntp-mathlib huggingface dataset:
theorem zero_rpow_def (y : ℝ) : (0 : ℝ≥0∞) ^ y = if 0 < y then 0 else if y = 0 then 1 else ⊤ := by
  rcases lt_trichotomy (0 : ℝ) y with (H | rfl | H)
  · simp [H, ne_of_gt, zero_rpow_of_pos, lt_irrefl]
  · 

Proof state:
case inr.inl
⊢ 0 ^ 0 = if 0 < 0 then 0 else if 0 = 0 then 1 else ⊤

Next tactic:
simp [lt_irrefl]
theorem zero_rpow_def (y : ℝ) : (0 : ℝ≥0∞) ^ y = if 0 < y then 0 else if y = 0 then 1 else ⊤ := by
  rcases lt_trichotomy (0 : ℝ) y with (H | rfl | H)
  · simp [H, ne_of_gt, zero_rpow_of_pos, lt_irrefl]
  · simp [lt_irrefl]
  · 

Proof state:
case inr.inr
y : ℝ
H : y < 0
⊢ 0 ^ y = if 0 < y then 0 else if y = 0 then 1 else ⊤

Next tactic:
simp [H, asymm H, ne_of_lt, zero_rpow_of_neg]
@[simp]
theorem zero_rpow_mul_self (y : ℝ) : (0 : ℝ≥0∞) ^ y * (0 : ℝ≥0∞) ^ y = (0 : ℝ≥0∞) ^ y := by
  

Proof state:
y : ℝ
⊢ 0 ^ y * 0 ^ y = 0 ^ y

Next tactic:
rw [zero_rpow_def]
@[simp]
theorem zero_rpow_mul_self (y : ℝ) : (0 : ℝ≥0∞) ^ y * (0 : ℝ≥0∞) ^ y = (0 : ℝ≥0∞) ^ y := by
  rw [zero_rpow_def]
  

Proof state:
y : ℝ
⊢ ((if 0 < y then 0 else if y = 0 then 1 else ⊤) * if 0 < y then 0 else if y = 0 then 1 else ⊤) =
    if 0 < y then 0 else if y = 0 then 1 else ⊤

Next tactic:
split_ifs
@[simp]
theorem zero_rpow_mul_self (y : ℝ) : (0 : ℝ≥0∞) ^ y * (0 : ℝ≥0∞) ^ y = (0 : ℝ≥0∞) ^ y := by
  rw [zero_rpow_def]
  split_ifs
  

Proof state:
case pos
y : ℝ
h✝ : 0 < y
⊢ 0 * 0 = 0
case pos
y : ℝ
h✝¹ : ¬0 < y
h✝ : y = 0
⊢ 1 * 1 = 1
case neg y : ℝ h✝¹ : ¬0 < y h✝ : ¬y = 0 ⊢ ⊤ * ⊤ = ⊤

Next tactic:
exacts [zero_mul _, one_mul _, top_mul_top]
@[norm_cast]
theorem coe_rpow_of_ne_zero {x : ℝ≥0} (h : x ≠ 0) (y : ℝ) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  

Proof state:
x : ℝ≥0
h : x ≠ 0
y : ℝ
⊢ ↑x ^ y = ↑(x ^ y)

Next tactic:
rw [← ENNReal.some_eq_coe]
@[norm_cast]
theorem coe_rpow_of_ne_zero {x : ℝ≥0} (h : x ≠ 0) (y : ℝ) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  rw [← ENNReal.some_eq_coe]
  

Proof state:
x : ℝ≥0
h : x ≠ 0
y : ℝ
⊢ some x ^ y = ↑(x ^ y)

Next tactic:
dsimp only [(· ^ ·), Pow.pow, rpow]
@[norm_cast]
theorem coe_rpow_of_ne_zero {x : ℝ≥0} (h : x ≠ 0) (y : ℝ) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  rw [← ENNReal.some_eq_coe]
  dsimp only [(· ^ ·), Pow.pow, rpow]
  

Proof state:
x : ℝ≥0
h : x ≠ 0
y : ℝ
⊢ (if x = 0 ∧ y < 0 then ⊤ else ↑(NNReal.rpow x y)) = ↑(NNReal.rpow x y)

Next tactic:
simp [h]
@[norm_cast]
theorem coe_rpow_of_nonneg (x : ℝ≥0) {y : ℝ} (h : 0 ≤ y) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  

Proof state:
x : ℝ≥0
y : ℝ
h : 0 ≤ y
⊢ ↑x ^ y = ↑(x ^ y)

Next tactic:
by_cases hx : x = 0
@[norm_cast]
theorem coe_rpow_of_nonneg (x : ℝ≥0) {y : ℝ} (h : 0 ≤ y) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  by_cases hx : x = 0
  · 

Proof state:
case pos
x : ℝ≥0
y : ℝ
h : 0 ≤ y
hx : x = 0
⊢ ↑x ^ y = ↑(x ^ y)

Next tactic:
rcases le_iff_eq_or_lt.1 h with (H | H)
@[norm_cast]
theorem coe_rpow_of_nonneg (x : ℝ≥0) {y : ℝ} (h : 0 ≤ y) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  by_cases hx : x = 0
  · rcases le_iff_eq_or_lt.1 h with (H | H)
    · 

Proof state:
case pos.inl
x : ℝ≥0
y : ℝ
h : 0 ≤ y
hx : x = 0
H : 0 = y
⊢ ↑x ^ y = ↑(x ^ y)

Next tactic:
simp [hx, H.symm]
@[norm_cast]
theorem coe_rpow_of_nonneg (x : ℝ≥0) {y : ℝ} (h : 0 ≤ y) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  by_cases hx : x = 0
  · rcases le_iff_eq_or_lt.1 h with (H | H)
    · simp [hx, H.symm]
    · 

Proof state:
case pos.inr
x : ℝ≥0
y : ℝ
h : 0 ≤ y
hx : x = 0
H : 0 < y
⊢ ↑x ^ y = ↑(x ^ y)

Next tactic:
simp [hx, zero_rpow_of_pos H, NNReal.zero_rpow (ne_of_gt H)]
@[norm_cast]
theorem coe_rpow_of_nonneg (x : ℝ≥0) {y : ℝ} (h : 0 ≤ y) : (x : ℝ≥0∞) ^ y = (x ^ y : ℝ≥0) := by
  by_cases hx : x = 0
  · rcases le_iff_eq_or_lt.1 h with (H | H)
    · simp [hx, H.symm]
    · simp [hx, zero_rpow_of_pos H, NNReal.zero_rpow (ne_of_gt H)]
  · 

Proof state:
case neg
x : ℝ≥0
y : ℝ
h : 0 ≤ y
hx : ¬x = 0
⊢ ↑x ^ y = ↑(x ^ y)

Next tactic:
exact coe_rpow_of_ne_zero hx _
@[simp]
theorem rpow_one (x : ℝ≥0∞) : x ^ (1 : ℝ) = x := by
  

Proof state:
x : ℝ≥0∞
⊢ x ^ 1 = x

Next tactic:
cases x
@[simp]
theorem rpow_one (x : ℝ≥0∞) : x ^ (1 : ℝ) = x := by
  cases x
  · 

Proof state:
case none
⊢ none ^ 1 = none

Next tactic:
exact dif_pos zero_lt_one
@[simp]
theorem rpow_one (x : ℝ≥0∞) : x ^ (1 : ℝ) = x := by
  cases x
  · exact dif_pos zero_lt_one
  · 

Proof state:
case some
val✝ : ℝ≥0
⊢ some val✝ ^ 1 = some val✝

Next tactic:
change ite _ _ _ = _
@[simp]
theorem rpow_one (x : ℝ≥0∞) : x ^ (1 : ℝ) = x := by
  cases x
  · exact dif_pos zero_lt_one
  · change ite _ _ _ = _
    

Proof state:
case some
val✝ : ℝ≥0
⊢ (if val✝ = 0 ∧ 1 < 0 then ⊤ else ↑(val✝ ^ 1)) = some val✝

Next tactic:
simp only [NNReal.rpow_one, some_eq_coe, ite_eq_right_iff, top_ne_coe, and_imp]
@[simp]
theorem rpow_one (x : ℝ≥0∞) : x ^ (1 : ℝ) = x := by
  cases x
  · exact dif_pos zero_lt_one
  · change ite _ _ _ = _
    simp only [NNReal.rpow_one, some_eq_coe, ite_eq_right_iff, top_ne_coe, and_imp]
    

Proof state:
case some
val✝ : ℝ≥0
⊢ val✝ = 0 → 1 < 0 → False

Next tactic:
exact fun _ => zero_le_one.not_lt
@[simp]
theorem one_rpow (x : ℝ) : (1 : ℝ≥0∞) ^ x = 1 := by
  

Proof state:
x : ℝ
⊢ 1 ^ x = 1

Next tactic:
rw [← coe_one, coe_rpow_of_ne_zero one_ne_zero]
@[simp]
theorem one_rpow (x : ℝ) : (1 : ℝ≥0∞) ^ x = 1 := by
  rw [← coe_one, coe_rpow_of_ne_zero one_ne_zero]
  

Proof state:
x : ℝ
⊢ ↑(1 ^ x) = ↑1

Next tactic:
simp
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  

Proof state:
x : ℝ≥0∞
y : ℝ
⊢ x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0

Next tactic:
cases' x with x
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · 

Proof state:
case none
y : ℝ
⊢ none ^ y = 0 ↔ none = 0 ∧ 0 < y ∨ none = ⊤ ∧ y < 0

Next tactic:
rcases lt_trichotomy y 0 with (H | H | H)
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inl
y : ℝ
H : y < 0
⊢ none ^ y = 0 ↔ none = 0 ∧ 0 < y ∨ none = ⊤ ∧ y < 0

Next tactic:
simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inr.inl
y : ℝ
H : y = 0
⊢ none ^ y = 0 ↔ none = 0 ∧ 0 < y ∨ none = ⊤ ∧ y < 0

Next tactic:
simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inr.inr
y : ℝ
H : 0 < y
⊢ none ^ y = 0 ↔ none = 0 ∧ 0 < y ∨ none = ⊤ ∧ y < 0

Next tactic:
simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · 

Proof state:
case some
y : ℝ
x : ℝ≥0
⊢ some x ^ y = 0 ↔ some x = 0 ∧ 0 < y ∨ some x = ⊤ ∧ y < 0

Next tactic:
by_cases h : x = 0
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · 

Proof state:
case pos
y : ℝ
x : ℝ≥0
h : x = 0
⊢ some x ^ y = 0 ↔ some x = 0 ∧ 0 < y ∨ some x = ⊤ ∧ y < 0

Next tactic:
rcases lt_trichotomy y 0 with (H | H | H)
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inl
y : ℝ
x : ℝ≥0
h : x = 0
H : y < 0
⊢ some x ^ y = 0 ↔ some x = 0 ∧ 0 < y ∨ some x = ⊤ ∧ y < 0

Next tactic:
simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inr.inl
y : ℝ
x : ℝ≥0
h : x = 0
H : y = 0
⊢ some x ^ y = 0 ↔ some x = 0 ∧ 0 < y ∨ some x = ⊤ ∧ y < 0

Next tactic:
simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inr.inr
y : ℝ
x : ℝ≥0
h : x = 0
H : 0 < y
⊢ some x ^ y = 0 ↔ some x = 0 ∧ 0 < y ∨ some x = ⊤ ∧ y < 0

Next tactic:
simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_zero_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = 0 ↔ x = 0 ∧ 0 < y ∨ x = ⊤ ∧ y < 0 := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
    · 

Proof state:
case neg
y : ℝ
x : ℝ≥0
h : ¬x = 0
⊢ some x ^ y = 0 ↔ some x = 0 ∧ 0 < y ∨ some x = ⊤ ∧ y < 0

Next tactic:
simp [coe_rpow_of_ne_zero h, h]
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  

Proof state:
x : ℝ≥0∞
y : ℝ
⊢ x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y

Next tactic:
cases' x with x
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · 

Proof state:
case none
y : ℝ
⊢ none ^ y = ⊤ ↔ none = 0 ∧ y < 0 ∨ none = ⊤ ∧ 0 < y

Next tactic:
rcases lt_trichotomy y 0 with (H | H | H)
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inl
y : ℝ
H : y < 0
⊢ none ^ y = ⊤ ↔ none = 0 ∧ y < 0 ∨ none = ⊤ ∧ 0 < y

Next tactic:
simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inr.inl
y : ℝ
H : y = 0
⊢ none ^ y = ⊤ ↔ none = 0 ∧ y < 0 ∨ none = ⊤ ∧ 0 < y

Next tactic:
simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inr.inr
y : ℝ
H : 0 < y
⊢ none ^ y = ⊤ ↔ none = 0 ∧ y < 0 ∨ none = ⊤ ∧ 0 < y

Next tactic:
simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · 

Proof state:
case some
y : ℝ
x : ℝ≥0
⊢ some x ^ y = ⊤ ↔ some x = 0 ∧ y < 0 ∨ some x = ⊤ ∧ 0 < y

Next tactic:
by_cases h : x = 0
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · 

Proof state:
case pos
y : ℝ
x : ℝ≥0
h : x = 0
⊢ some x ^ y = ⊤ ↔ some x = 0 ∧ y < 0 ∨ some x = ⊤ ∧ 0 < y

Next tactic:
rcases lt_trichotomy y 0 with (H | H | H)
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inl
y : ℝ
x : ℝ≥0
h : x = 0
H : y < 0
⊢ some x ^ y = ⊤ ↔ some x = 0 ∧ y < 0 ∨ some x = ⊤ ∧ 0 < y

Next tactic:
simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inr.inl
y : ℝ
x : ℝ≥0
h : x = 0
H : y = 0
⊢ some x ^ y = ⊤ ↔ some x = 0 ∧ y < 0 ∨ some x = ⊤ ∧ 0 < y

Next tactic:
simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inr.inr
y : ℝ
x : ℝ≥0
h : x = 0
H : 0 < y
⊢ some x ^ y = ⊤ ↔ some x = 0 ∧ y < 0 ∨ some x = ⊤ ∧ 0 < y

Next tactic:
simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
@[simp]
theorem rpow_eq_top_iff {x : ℝ≥0∞} {y : ℝ} : x ^ y = ⊤ ↔ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [H, top_rpow_of_neg, top_rpow_of_pos, le_of_lt]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        simp [h, H, zero_rpow_of_neg, zero_rpow_of_pos, le_of_lt]
    · 

Proof state:
case neg
y : ℝ
x : ℝ≥0
h : ¬x = 0
⊢ some x ^ y = ⊤ ↔ some x = 0 ∧ y < 0 ∨ some x = ⊤ ∧ 0 < y

Next tactic:
simp [coe_rpow_of_ne_zero h, h]
theorem rpow_eq_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y = ⊤ ↔ x = ⊤ := by
  

Proof state:
x : ℝ≥0∞
y : ℝ
hy : 0 < y
⊢ x ^ y = ⊤ ↔ x = ⊤

Next tactic:
simp [rpow_eq_top_iff, hy, asymm hy]
lemma rpow_lt_top_iff_of_pos {x : ℝ≥0∞} {y : ℝ} (hy : 0 < y) : x ^ y < ∞ ↔ x < ∞ := by
  

Proof state:
x : ℝ≥0∞
y : ℝ
hy : 0 < y
⊢ x ^ y < ⊤ ↔ x < ⊤

Next tactic:
simp only [lt_top_iff_ne_top, Ne.def, rpow_eq_top_iff_of_pos hy]
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
  

Proof state:
x : ℝ≥0∞
y : ℝ
hy0 : 0 ≤ y
⊢ x ^ y = ⊤ → x = ⊤

Next tactic:
rw [ENNReal.rpow_eq_top_iff]
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
  rw [ENNReal.rpow_eq_top_iff]
  

Proof state:
x : ℝ≥0∞
y : ℝ
hy0 : 0 ≤ y
⊢ x = 0 ∧ y < 0 ∨ x = ⊤ ∧ 0 < y → x = ⊤

Next tactic:
rintro (h|h)
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
  rw [ENNReal.rpow_eq_top_iff]
  rintro (h|h)
  · 

Proof state:
case inl
x : ℝ≥0∞
y : ℝ
hy0 : 0 ≤ y
h : x = 0 ∧ y < 0
⊢ x = ⊤

Next tactic:
exfalso
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
  rw [ENNReal.rpow_eq_top_iff]
  rintro (h|h)
  · exfalso
    

Proof state:
case inl.h
x : ℝ≥0∞
y : ℝ
hy0 : 0 ≤ y
h : x = 0 ∧ y < 0
⊢ False

Next tactic:
rw [lt_iff_not_ge] at h
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
  rw [ENNReal.rpow_eq_top_iff]
  rintro (h|h)
  · exfalso
    rw [lt_iff_not_ge] at h
    

Proof state:
case inl.h
x : ℝ≥0∞
y : ℝ
hy0 : 0 ≤ y
h : x = 0 ∧ ¬y ≥ 0
⊢ False

Next tactic:
exact h.right hy0
theorem rpow_eq_top_of_nonneg (x : ℝ≥0∞) {y : ℝ} (hy0 : 0 ≤ y) : x ^ y = ⊤ → x = ⊤ := by
  rw [ENNReal.rpow_eq_top_iff]
  rintro (h|h)
  · exfalso
    rw [lt_iff_not_ge] at h
    exact h.right hy0
  · 

Proof state:
case inr
x : ℝ≥0∞
y : ℝ
hy0 : 0 ≤ y
h : x = ⊤ ∧ 0 < y
⊢ x = ⊤

Next tactic:
exact h.left
theorem rpow_add {x : ℝ≥0∞} (y z : ℝ) (hx : x ≠ 0) (h'x : x ≠ ⊤) : x ^ (y + z) = x ^ y * x ^ z := by
  

Proof state:
x : ℝ≥0∞
y z : ℝ
hx : x ≠ 0
h'x : x ≠ ⊤
⊢ x ^ (y + z) = x ^ y * x ^ z

Next tactic:
cases' x with x
theorem rpow_add {x : ℝ≥0∞} (y z : ℝ) (hx : x ≠ 0) (h'x : x ≠ ⊤) : x ^ (y + z) = x ^ y * x ^ z := by
  cases' x with x
  · 

Proof state:
case none
y z : ℝ
hx : none ≠ 0
h'x : none ≠ ⊤
⊢ none ^ (y + z) = none ^ y * none ^ z

Next tactic:
exact (h'x rfl).elim
theorem rpow_add {x : ℝ≥0∞} (y z : ℝ) (hx : x ≠ 0) (h'x : x ≠ ⊤) : x ^ (y + z) = x ^ y * x ^ z := by
  cases' x with x
  · exact (h'x rfl).elim
  

Proof state:
case some
y z : ℝ
x : ℝ≥0
hx : some x ≠ 0
h'x : some x ≠ ⊤
⊢ some x ^ (y + z) = some x ^ y * some x ^ z

Next tactic:
have : x ≠ 0 := fun h => by simp [h] at hx
theorem rpow_add {x : ℝ≥0∞} (y z : ℝ) (hx : x ≠ 0) (h'x : x ≠ ⊤) : x ^ (y + z) = x ^ y * x ^ z := by
  cases' x with x
  · exact (h'x rfl).elim
  have : x ≠ 0 := fun h => by 

Proof state:
y z : ℝ
x : ℝ≥0
hx : some x ≠ 0
h'x : some x ≠ ⊤
h : x = 0
⊢ False

Next tactic:
simp [h] at hx
theorem rpow_add {x : ℝ≥0∞} (y z : ℝ) (hx : x ≠ 0) (h'x : x ≠ ⊤) : x ^ (y + z) = x ^ y * x ^ z := by
  cases' x with x
  · exact (h'x rfl).elim
  have : x ≠ 0 := fun h => by simp [h] at hx
  

Proof state:
case some
y z : ℝ
x : ℝ≥0
hx : some x ≠ 0
h'x : some x ≠ ⊤
this : x ≠ 0
⊢ some x ^ (y + z) = some x ^ y * some x ^ z

Next tactic:
simp [coe_rpow_of_ne_zero this, NNReal.rpow_add this]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  

Proof state:
x : ℝ≥0∞
y : ℝ
⊢ x ^ (-y) = (x ^ y)⁻¹

Next tactic:
cases' x with x
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · 

Proof state:
case none
y : ℝ
⊢ none ^ (-y) = (none ^ y)⁻¹

Next tactic:
rcases lt_trichotomy y 0 with (H | H | H)
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inl
y : ℝ
H : y < 0
⊢ none ^ (-y) = (none ^ y)⁻¹

Next tactic:
simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inr.inl
y : ℝ
H : y = 0
⊢ none ^ (-y) = (none ^ y)⁻¹

Next tactic:
simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      

Proof state:
case none.inr.inr
y : ℝ
H : 0 < y
⊢ none ^ (-y) = (none ^ y)⁻¹

Next tactic:
simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · 

Proof state:
case some
y : ℝ
x : ℝ≥0
⊢ some x ^ (-y) = (some x ^ y)⁻¹

Next tactic:
by_cases h : x = 0
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · by_cases h : x = 0
    · 

Proof state:
case pos
y : ℝ
x : ℝ≥0
h : x = 0
⊢ some x ^ (-y) = (some x ^ y)⁻¹

Next tactic:
rcases lt_trichotomy y 0 with (H | H | H)
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inl
y : ℝ
x : ℝ≥0
h : x = 0
H : y < 0
⊢ some x ^ (-y) = (some x ^ y)⁻¹

Next tactic:
simp [h, zero_rpow_of_pos, zero_rpow_of_neg, H, neg_pos.mpr]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inr.inl
y : ℝ
x : ℝ≥0
h : x = 0
H : y = 0
⊢ some x ^ (-y) = (some x ^ y)⁻¹

Next tactic:
simp [h, zero_rpow_of_pos, zero_rpow_of_neg, H, neg_pos.mpr]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        

Proof state:
case pos.inr.inr
y : ℝ
x : ℝ≥0
h : x = 0
H : 0 < y
⊢ some x ^ (-y) = (some x ^ y)⁻¹

Next tactic:
simp [h, zero_rpow_of_pos, zero_rpow_of_neg, H, neg_pos.mpr]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        simp [h, zero_rpow_of_pos, zero_rpow_of_neg, H, neg_pos.mpr]
    · 

Proof state:
case neg
y : ℝ
x : ℝ≥0
h : ¬x = 0
⊢ some x ^ (-y) = (some x ^ y)⁻¹

Next tactic:
have A : x ^ y ≠ 0 := by simp [h]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        simp [h, zero_rpow_of_pos, zero_rpow_of_neg, H, neg_pos.mpr]
    · have A : x ^ y ≠ 0 := by 

Proof state:
y : ℝ
x : ℝ≥0
h : ¬x = 0
⊢ x ^ y ≠ 0

Next tactic:
simp [h]
theorem rpow_neg (x : ℝ≥0∞) (y : ℝ) : x ^ (-y) = (x ^ y)⁻¹ := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (H | H | H) <;>
      simp [top_rpow_of_pos, top_rpow_of_neg, H, neg_pos.mpr]
  · by_cases h : x = 0
    · rcases lt_trichotomy y 0 with (H | H | H) <;>
        simp [h, zero_rpow_of_pos, zero_rpow_of_neg, H, neg_pos.mpr]
    · have A : x ^ y ≠ 0 := by simp [h]
      

Proof state:
case neg
y : ℝ
x : ℝ≥0
h : ¬x = 0
A : x ^ y ≠ 0
⊢ some x ^ (-y) = (some x ^ y)⁻¹

Next tactic:
simp [coe_rpow_of_ne_zero h, ← coe_inv A, NNReal.rpow_neg]
theorem rpow_sub {x : ℝ≥0∞} (y z : ℝ) (hx : x ≠ 0) (h'x : x ≠ ⊤) : x ^ (y - z) = x ^ y / x ^ z := by
  

Proof state:
x : ℝ≥0∞
y z : ℝ
hx : x ≠ 0
h'x : x ≠ ⊤
⊢ x ^ (y - z) = x ^ y / x ^ z

Next tactic:
rw [sub_eq_add_neg, rpow_add _ _ hx h'x, rpow_neg, div_eq_mul_inv]
theorem rpow_neg_one (x : ℝ≥0∞) : x ^ (-1 : ℝ) = x⁻¹ := by 

Proof state:
x : ℝ≥0∞
⊢ x ^ (-1) = x⁻¹

Next tactic:
simp [rpow_neg]
theorem rpow_mul (x : ℝ≥0∞) (y z : ℝ) : x ^ (y * z) = (x ^ y) ^ z := by
  

Proof state:
x : ℝ≥0∞
y z : ℝ
⊢ x ^ (y * z) = (x ^ y) ^ z

Next tactic:
cases' x with x
theorem rpow_mul (x : ℝ≥0∞) (y z : ℝ) : x ^ (y * z) = (x ^ y) ^ z := by
  cases' x with x
  · 

Proof state:
case none
y z : ℝ
⊢ none ^ (y * z) = (none ^ y) ^ z

Next tactic:
rcases lt_trichotomy y 0 with (Hy | Hy | Hy)
theorem rpow_mul (x : ℝ≥0∞) (y z : ℝ) : x ^ (y * z) = (x ^ y) ^ z := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (Hy | Hy | Hy) <;>
        

Proof state:
case none.inl
y z : ℝ
Hy : y < 0
⊢ none ^ (y * z) = (none ^ y) ^ z

Next tactic:
rcases lt_trichotomy z 0 with (Hz | Hz | Hz)
theorem rpow_mul (x : ℝ≥0∞) (y z : ℝ) : x ^ (y * z) = (x ^ y) ^ z := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (Hy | Hy | Hy) <;>
        

Proof state:
case none.inr.inl
y z : ℝ
Hy : y = 0
⊢ none ^ (y * z) = (none ^ y) ^ z

Next tactic:
rcases lt_trichotomy z 0 with (Hz | Hz | Hz)
theorem rpow_mul (x : ℝ≥0∞) (y z : ℝ) : x ^ (y * z) = (x ^ y) ^ z := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (Hy | Hy | Hy) <;>
        

Proof state:
case none.inr.inr
y z : ℝ
Hy : 0 < y
⊢ none ^ (y * z) = (none ^ y) ^ z

Next tactic:
rcases lt_trichotomy z 0 with (Hz | Hz | Hz)
theorem rpow_mul (x : ℝ≥0∞) (y z : ℝ) : x ^ (y * z) = (x ^ y) ^ z := by
  cases' x with x
  · rcases lt_trichotomy y 0 with (Hy | Hy | Hy) <;>
        rcases lt_trichotomy z 0 with (Hz | Hz | Hz) <;>
      

Proof state:
case none.inl.inl
y z : ℝ
Hy : y < 0
Hz : z < 0
⊢ none ^ (y * z) = (none ^ y) ^ z

Next tactic:
simp [Hy, Hz, zero_rpow_of_neg, zero_rpow_of_pos, top_rpow_of_neg, top_rpow_of_pos,
        mul_pos_of_neg_of_neg, mul_neg_of_neg_of_pos, mul_neg_of_pos_of_neg]