Theorem: MeasureTheory.integral_comp_rpow_Ioi
File: Mathlib/MeasureTheory/Integral/IntegralEqImproper.lean

tactic: let S := Ioi (0 : ℝ)
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
⊢ (∫ (x : ℝ) in Ioi 0, (abs p * x ^ (p - 1)) • g (x ^ p)) = ∫ (y : ℝ) in Ioi 0, g y

tactic: have a1 : ∀ x : ℝ, x ∈ S → HasDerivWithinAt (fun t : ℝ => t ^ p) (p * x ^ (p - 1)) S x :=
  fun x hx => (hasDerivAt_rpow_const (Or.inl (mem_Ioi.mp hx).ne')).hasDerivWithinAt
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
⊢ (∫ (x : ℝ) in Ioi 0, (abs p * x ^ (p - 1)) • g (x ^ p)) = ∫ (y : ℝ) in Ioi 0, g y

tactic: have := integral_image_eq_integral_abs_deriv_smul measurableSet_Ioi a1 a2 g
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
a3 : (fun t => t ^ p) '' S = S
⊢ (∫ (x : ℝ) in Ioi 0, (abs p * x ^ (p - 1)) • g (x ^ p)) = ∫ (y : ℝ) in Ioi 0, g y

tactic: rw [a3] at this
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
a3 : (fun t => t ^ p) '' S = S
this : (∫ (x : ℝ) in (fun t => t ^ p) '' Ioi 0, g x) = ∫ (x : ℝ) in Ioi 0, abs (p * x ^ (p - 1)) • g (x ^ p)
⊢ (∫ (x : ℝ) in Ioi 0, (abs p * x ^ (p - 1)) • g (x ^ p)) = ∫ (y : ℝ) in Ioi 0, g y

tactic: rw [this]
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
a3 : (fun t => t ^ p) '' S = S
this : (∫ (x : ℝ) in S, g x) = ∫ (x : ℝ) in Ioi 0, abs (p * x ^ (p - 1)) • g (x ^ p)
⊢ (∫ (x : ℝ) in Ioi 0, (abs p * x ^ (p - 1)) • g (x ^ p)) = ∫ (y : ℝ) in Ioi 0, g y

tactic: refine' set_integral_congr measurableSet_Ioi _
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
a3 : (fun t => t ^ p) '' S = S
this : (∫ (x : ℝ) in S, g x) = ∫ (x : ℝ) in Ioi 0, abs (p * x ^ (p - 1)) • g (x ^ p)
⊢ (∫ (x : ℝ) in Ioi 0, (abs p * x ^ (p - 1)) • g (x ^ p)) = ∫ (x : ℝ) in Ioi 0, abs (p * x ^ (p - 1)) • g (x ^ p)

tactic: intro x hx
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
a3 : (fun t => t ^ p) '' S = S
this : (∫ (x : ℝ) in S, g x) = ∫ (x : ℝ) in Ioi 0, abs (p * x ^ (p - 1)) • g (x ^ p)
⊢ EqOn (fun x => (abs p * x ^ (p - 1)) • g (x ^ p)) (fun x => abs (p * x ^ (p - 1)) • g (x ^ p)) (Ioi 0)

tactic: dsimp only
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
a3 : (fun t => t ^ p) '' S = S
this : (∫ (x : ℝ) in S, g x) = ∫ (x : ℝ) in Ioi 0, abs (p * x ^ (p - 1)) • g (x ^ p)
x : ℝ
hx : x ∈ Ioi 0
⊢ (fun x => (abs p * x ^ (p - 1)) • g (x ^ p)) x = (fun x => abs (p * x ^ (p - 1)) • g (x ^ p)) x

tactic: rw [abs_mul, abs_of_nonneg (rpow_nonneg_of_nonneg (le_of_lt hx) _)]
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
a3 : (fun t => t ^ p) '' S = S
this : (∫ (x : ℝ) in S, g x) = ∫ (x : ℝ) in Ioi 0, abs (p * x ^ (p - 1)) • g (x ^ p)
x : ℝ
hx : x ∈ Ioi 0
⊢ (abs p * x ^ (p - 1)) • g (x ^ p) = abs (p * x ^ (p - 1)) • g (x ^ p)

tactic: rcases lt_or_gt_of_ne hp with (h | h)
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
⊢ InjOn (fun x => x ^ p) S

tactic: exact StrictMonoOn.injOn fun x hx y _ hxy => rpow_lt_rpow (mem_Ioi.mp hx).le hxy h
state_before: case inr
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
h : p > 0
⊢ InjOn (fun x => x ^ p) S

tactic: apply StrictAntiOn.injOn
state_before: case inl
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
h : p < 0
⊢ InjOn (fun x => x ^ p) S

tactic: intro x hx y hy hxy
state_before: case inl.H
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
h : p < 0
⊢ StrictAntiOn (fun x => x ^ p) S

tactic: rw [← inv_lt_inv (rpow_pos_of_pos hx p) (rpow_pos_of_pos hy p), ← rpow_neg (le_of_lt hx),
  ← rpow_neg (le_of_lt hy)]
state_before: case inl.H
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
h : p < 0
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x < y
⊢ (fun x => x ^ p) y < (fun x => x ^ p) x

tactic: exact rpow_lt_rpow (le_of_lt hx) hxy (neg_pos.mpr h)
state_before: case inl.H
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
h : p < 0
x : ℝ
hx : x ∈ S
y : ℝ
hy : y ∈ S
hxy : x < y
⊢ x ^ (-p) < y ^ (-p)

tactic: ext1 x
state_before: E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
⊢ (fun t => t ^ p) '' S = S

tactic: rw [mem_image]
state_before: case h
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
x : ℝ
⊢ x ∈ (fun t => t ^ p) '' S ↔ x ∈ S

tactic: constructor
state_before: case h
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
x : ℝ
⊢ (∃ x_1, x_1 ∈ S ∧ x_1 ^ p = x) ↔ x ∈ S

tactic: rintro ⟨y, hy, rfl⟩
state_before: case h.mp
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
x : ℝ
⊢ (∃ x_1, x_1 ∈ S ∧ x_1 ^ p = x) → x ∈ S

tactic: exact rpow_pos_of_pos hy p
state_before: case h.mp.intro.intro
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
y : ℝ
hy : y ∈ S
⊢ y ^ p ∈ S

tactic: intro hx
state_before: case h.mpr
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
x : ℝ
⊢ x ∈ S → ∃ x_1, x_1 ∈ S ∧ x_1 ^ p = x

tactic: refine' ⟨x ^ (1 / p), rpow_pos_of_pos hx _, _⟩
state_before: case h.mpr
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
x : ℝ
hx : x ∈ S
⊢ ∃ x_1, x_1 ∈ S ∧ x_1 ^ p = x

tactic: rw [← rpow_mul (le_of_lt hx), one_div_mul_cancel hp, rpow_one]
state_before: case h.mpr
E : Type u_1
f : ℝ → E
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : CompleteSpace E
g : ℝ → E
p : ℝ
hp : p ≠ 0
S : Set ℝ := Ioi 0
a1 : ∀ (x : ℝ), x ∈ S → HasDerivWithinAt (fun t => t ^ p) (p * x ^ (p - 1)) S x
a2 : InjOn (fun x => x ^ p) S
x : ℝ
hx : x ∈ S
⊢ (x ^ (1 / p)) ^ p = x