Theorem: NNReal.continuousAt_rpow
File: Mathlib/Analysis/SpecialFunctions/Pow/Continuity.lean

tactic: have :
  (fun p : ℝ≥0 × ℝ => p.1 ^ p.2) =
    Real.toNNReal ∘ (fun p : ℝ × ℝ => p.1 ^ p.2) ∘ fun p : ℝ≥0 × ℝ => (p.1.1, p.2) := by
  ext p
  erw [coe_rpow, Real.coe_toNNReal _ (Real.rpow_nonneg p.1.2 _)]
  rfl
state_before: x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
⊢ ContinuousAt (fun p => p.1 ^ p.2) (x, y)
state_after: x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (fun p => p.1 ^ p.2) (x, y)

tactic: rw [this]
state_before: x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (fun p => p.1 ^ p.2) (x, y)
state_after: x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)) (x, y)

tactic: refine continuous_real_toNNReal.continuousAt.comp (ContinuousAt.comp ?_ ?_)
state_before: x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)) (x, y)
state_after: case refine_1
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (fun p => p.1 ^ p.2) (↑(x, y).1, (x, y).2)

case refine_2
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (fun p => (↑p.1, p.2)) (x, y)

tactic: ext p
state_before: x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
⊢ (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
state_after: case h.a
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
p : ℝ≥0 × ℝ
⊢ ↑(p.1 ^ p.2) = ↑((toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)) p)

tactic: erw [coe_rpow, Real.coe_toNNReal _ (Real.rpow_nonneg p.1.2 _)]
state_before: case h.a
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
p : ℝ≥0 × ℝ
⊢ ↑(p.1 ^ p.2) = ↑((toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)) p)
state_after: case h.a
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
p : ℝ≥0 × ℝ
⊢ ↑p.1 ^ p.2 = ↑p.1 ^ ((fun p => (↑p.1, p.2)) p).2

tactic: rfl
state_before: case h.a
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
p : ℝ≥0 × ℝ
⊢ ↑p.1 ^ p.2 = ↑p.1 ^ ((fun p => (↑p.1, p.2)) p).2
state_after: no goals

tactic: apply Real.continuousAt_rpow
state_before: case refine_1
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (fun p => p.1 ^ p.2) (↑(x, y).1, (x, y).2)
state_after: case refine_1.h
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ (↑(x, y).1, (x, y).2).1 ≠ 0 ∨ 0 < (↑(x, y).1, (x, y).2).2

tactic: simpa using h
state_before: case refine_1.h
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ (↑(x, y).1, (x, y).2).1 ≠ 0 ∨ 0 < (↑(x, y).1, (x, y).2).2
state_after: no goals

tactic: exact ((continuous_subtype_val.comp continuous_fst).prod_mk continuous_snd).continuousAt
state_before: case refine_2
x : ℝ≥0
y : ℝ
h : x ≠ 0 ∨ 0 < y
this : (fun p => p.1 ^ p.2) = toNNReal ∘ (fun p => p.1 ^ p.2) ∘ fun p => (↑p.1, p.2)
⊢ ContinuousAt (fun p => (↑p.1, p.2)) (x, y)
state_after: no goals